原文链接: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