KAI


私信TA

用户名:uq_60608877448

访问量:979

签 名:

等  级
排  名 4485
经  验 1624
参赛次数 2
文章发表 8
年  龄 21
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:主要分为分成结构体定义,链表尾插遍历查找并删除链表元素和打印链表

注意事项:主要问题在于遍历查找删除链表元素,就是用指针s来记录L的上一个位置,L来遍历,L往后跳一格,如果没查到s就瞬移到L,然后L再往后跳一格,要是查到了,L就往回跳一格就是s,然后L的next直接指向后面的后面,实现断链,s就不变
参考代码:#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
//定义结构体
typedef struct  LNode{
   ElemType data;
   LNode*next;
}LNode,*LinkList;
//尾插法
void list_insert_tail(LinkList  &L,int i)
{
   L=(LinkList)malloc(sizeof(LNode));
   ElemType x;
   L->next=NULL;
   LinkList s,r=L;
   if(i<1){
       return;
   }
   for(int j=0;j<i;j++)
   {
       scanf("%d",&x);
       s=(LinkList)malloc(sizeof(LNode));
       s->data=x;
       r->next=s;
       r=s;
   }
   r->next=NULL;
}
//按值查找删除
void list_search_delete(LinkList L,ElemType del)
{
   if(!L){
       printf("false\n");
       return;
   }
   //利用L遍历寻找如果找到了,用s来存储L的上一个位置,然后L回到s再一次进两步
   LinkList s;
   s=L;
   L=L->next;
   while(L)
   {
       if(L->data==del)
       {
         L=s;
         L->next=L->next->next;
       } else{
           s=L;
           L=L->next;
       }
   }
}

//打印链表
void print_list(LinkList L)
{
   if(!L){
       printf("false\n");
       return;
   }
   L=L->next;
   while (L)
   {
       printf("%d ",L->data);
       L=L->next;
   }
   printf("\n");
}
int main() {
   int i;
   scanf("%d",&i);
   LinkList L;
   list_insert_tail(L,i);
   ElemType del;
   scanf("%d",&del);
   list_search_delete(L,del);
   print_list(L);
   return 0;
}

 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区