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

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

展开阅读全文

没有更多推荐了,返回首页