一方向チェーンテーブルのノードを削除

1244 ワード

一方向チェーンテーブルのヘッダheadが知られており、ノードを削除するアルゴリズムが書かれており、このノードを見つけてから削除する必要があります.
#include
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<next;
	while (q1!=NULL)
	{
		cout<number<next;
	}
	cout<>key;
	p=Delete(q->next,key);
	cout<number<next;
	}
	cout<

実行結果:
元のチェーンテーブルデータ:1 2 3 4 5 6 7 8 9削除するデータを入力する:6削除した後のチェーンテーブルデータ:1 2 3 4 5 8 9