已知一个单向链表的表头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