单链表删除所有值为key的删除操作

xiaoxiao2021-02-28  42

#include<iostream> #include<cstdlib> using  namespace std;    typedef struct node {   node *next;   int data; }*List;    void init(List *L) { *L=new node;   (*L)->next=NULL; } // void DeleteList(List L,int k) //{ // node *p,*s; // p=L->next; // while(p) // { // if(p->data==k) // {   // //    s=p->next;

//        p->next=s->next;            

   //        free(s);

// } // else p=p->next; // }

//}  

   //备注是我的错误代码,没想明白为啥不知报错  后面才想起  是这样的   删错了 我应该是找到要删除值的前一个结点 的时候就进行   s=p->next;

  p->next=s->next;         

而不是p->data=k的时候这样删除的是下一个

void DeleteList(List L,int a)//此链表假定带头结点,否则还要加一条对第一个结点的操作。LinkNode为定义的链表类型,a为指定的要删除的字符。这题目其实很简单 就是边界问题得判断好,不然很心累,初学者的烦恼。。。。。emmmm         { node *p,*q; p=L;  while (p->next!=NULL)     {     if (p->next->data==a)         { q=p->next;          p->next=p->next->next;           free(q);      }      else          p=p->next;      } }  void rearCreateList(List L,int n) {     node *r,*s;     r=L;     for(int i=0;i<n;i++)     {     s=(node *)malloc(sizeof(node));     cin>>s->data;     r->next=s;     r=s;     }      r->next=NULL;    } void printList(List L) { node *s; for(s=L->next;s!=NULL;s=s->next) {    cout<<s->data<<" "; }   }   int main()  {   List L;    init(&L);   int n;   cin>>n;   rearCreateList(L,n);     int k;   cin>>k;     DeleteList(L,k); printList(L);                     return 0; }
转载请注明原文地址: https://www.6miu.com/read-2632396.html

最新回复(0)