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

原文链接:http://blog.csdn.net/huahuahailang/article/details/8762785

已知一个单向链表的表头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 = node1 -> 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(int 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
输入要删除的数据:5
删除一个5之后的链表数据:
1 2 3 4 6 7 8 9

 
 
 
posted @ 2018-01-04 21:48  gatherstars  阅读(13269)  评论(0编辑  收藏  举报