刪除單向連結串列中的某一個節點
阿新 • • 發佈:2019-02-08
已知一個單向連結串列的表頭head,寫出一個刪除某一個節點的演算法,要求先找到此節點,然後刪除。
- #include<iostream>
- usingnamespace std;
- typedefstruct node
- {
- int number;
- struct node *next;
- }Node;
- Node *Delete(Node *head,int key)
- {
- Node *node1=head;
- Node *node2=NULL;
- if (head==NULL)
- {
-
return
- }
- else
- {
- if (node1->number==key)
- {
- head=head->next;
- free(node1);
- return head;
- }
- else
- {
- while (node1!=NULL)
- {
- node2=node1;
-
node2=node2->next;
- if (node2->number==key)
- {
- node1->next=node2->next;
- free(node2);
- break;
- }
- node1=node1->next;
- }
- return head;
- }
-
}
- }
- int main()
- {
- Node *head=(Node*)malloc(sizeof(Node));
- Node *p,*q,*q1;
- int key;
- p=(Node*)malloc(sizeof(Node));
- q1=q=head;
- int i;
- for (i=1;i<10;i++)
- {
- p->number=i;
- head->next=p;
- head=p;
- p=(Node*)malloc(sizeof(Node));
- }
- head->next=NULL;
- cout<<"原連結串列資料: "<<endl;
- q1=q1->next;
- while (q1!=NULL)
- {
- cout<<q1->number<<" ";
- q1=q1->next;
- }
- cout<<endl;
- cout<<"輸入要刪除的資料:";
- cin>>key;
- p=Delete(q->next,key);
- cout<<"刪除一個"<<key<<"之後的連結串列資料: "<<endl;
- while (p!=NULL)
- {
- cout<<p->number<<" ";
- p=p->next;
- }
- cout<<endl;
- free(p);
- free(head);
- return 0;
- }
執行結果:
原連結串列資料:
1 2 3 4 5 6 7 8 9
輸入要刪除的資料:6
刪除一個6之後的連結串列資料:
1 2 3 4 5 7 8 9