您的位置:首页 > 其它

删除单向链表中的某一个节点

2013-04-05 22:33 274 查看
已知一个单向链表的表头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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐