已知一个单向链表的表头head,写出一个删除某一个节点的算法,要求先找到此节点,然后删除。
- #include<iostream>
- using namespace std;
- typedef struct node
- {
- int number;
- struct node *next;
- }Node;
- Node *Delete(Node *head,int key)
- {
- Node *node1=head;
- Node *node2=NULL;
- if (head==NULL)
- {
- return NULL;
- }
- 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