由于邮寄名单中的一人已经移民到国外,需要删除把他从名单中删除。
在链表内删除节点又三种不同的情形:
1.删除第一个节点:只需要将head指向第二个节点
2.删除最后一个节点,只需要将指向最后一个节点的指针(引用)指向NULL(null)
3.删除中间节点,只要将需要将指向需要删除节点的指针(引用)指向需要删除节点的下一个节点
C代码:
在链表内删除节点又三种不同的情形:
1.删除第一个节点:只需要将head指向第二个节点
2.删除最后一个节点,只需要将指向最后一个节点的指针(引用)指向NULL(null)
3.删除中间节点,只要将需要将指向需要删除节点的指针(引用)指向需要删除节点的下一个节点
C代码:
1
#include<stdio.h>
2![]()
3
struct llist
4
{
5
int num;
6
char name[10];
7
struct llist *next;
8
};
9
typedef struct llist node;
10
typedef node *llink;
11![]()
12![]()
13
/*链表的创建*/
14
llink createllist()
15
{
16
llink head;
17
llink ptr,ptr1;
18
int i;
19
20
head = (llink)malloc(sizeof(node)); //分配第一个节点
21
if(!head)
22
return NULL;
23
printf("请输入六项邮寄数据:\n");
24
printf("请输入编号 ==> ");
25
scanf("%d",&head->num);
26
printf("请输入编号(%d)的姓名 ==> ",head->num);
27
scanf("%s",head->name);
28
head->next = NULL;
29
ptr = head;
30
for(i = 1;i < 6; i++)
31
{
32
ptr1 = (llink)malloc(sizeof(node));
33
if(!ptr1)
34
return NULL;
35
printf("请输入编号 ==> ");
36
scanf("%d",&ptr1->num);
37
printf("请输入编号(%d)的姓名 ==> ",ptr1->num);
38
scanf("%s",ptr1->name);
39
ptr1->next = NULL;
40
ptr -> next = ptr1;
41
ptr = ptr ->next;
42
}
43
return head;
44
}
45![]()
46
/*链表的节点遍历*/
47
llink findnode(llink head,int num)
48
{
49
llink ptr;
50
51
ptr = head;
52
while(ptr != NULL)
53
{
54
if(ptr->num == num)
55
return ptr;
56
ptr = ptr->next;
57
}
58
return ptr;
59
}
60![]()
61
/*链表的输出*/
62
void printllist(llink ptr)
63
{
64
while(ptr != NULL)
65
{
66
printf("Number:[%d]\n",ptr->num);
67
printf("Name:%s",ptr->name);
68
ptr = ptr->next;
69
printf("\n");
70
}
71
}
72![]()
73
/*指定节点的删除*/
74
llink deletenode(llink head,llink ptr)
75
{
76
llink previous;
77
78
if(ptr == head) //如果是第一个节点
79
return head->next;
80
else
81
{
82
previous = head;
83
while(previous -> next != ptr) //找到需要查找节点的前一个节点
84
previous = previous->next;
85
86
if(ptr->next == NULL) //链表是否结束
87
//删除最后一个结点
88
previous->next = NULL;
89
else
90
//删除中间一个节点
91
previous->next = ptr->next;
92
}
93
return head;
94
}
95![]()
96![]()
97
void main()
98
{
99
llink head;
100
llink ptr;
101
int num;
102
103
head = createllist();
104
if(!head)
105
{
106
printf("内存分配失败!\n");
107
exit(1);
108
}
109
printf("原来的链表:\n");
110
printllist(head);
111
while(1)
112
{
113
printf("请输入要删除的邮寄编号 ==> ");
114
scanf("%d",&num);
115
if(num != -1)
116
{
117
ptr = findnode(head,num);
118
if(!ptr)
119
printf("没有找到\n");
120
else
121
{
122
head = deletenode(head,ptr);
123
printf("删除后的链表:\n");
124
printllist(head);
125
}
126
}
127
else
128
exit(1);
129
}
130
}
#include<stdio.h>2

3
struct llist4
{5
int num;6
char name[10];7
struct llist *next;8
};9
typedef struct llist node;10
typedef node *llink;11

12

13
/*链表的创建*/14
llink createllist()15
{16
llink head;17
llink ptr,ptr1;18
int i;19
20
head = (llink)malloc(sizeof(node)); //分配第一个节点21
if(!head)22
return NULL; 23
printf("请输入六项邮寄数据:\n");24
printf("请输入编号 ==> ");25
scanf("%d",&head->num);26
printf("请输入编号(%d)的姓名 ==> ",head->num);27
scanf("%s",head->name);28
head->next = NULL;29
ptr = head; 30
for(i = 1;i < 6; i++)31
{32
ptr1 = (llink)malloc(sizeof(node));33
if(!ptr1)34
return NULL;35
printf("请输入编号 ==> ");36
scanf("%d",&ptr1->num);37
printf("请输入编号(%d)的姓名 ==> ",ptr1->num);38
scanf("%s",ptr1->name);39
ptr1->next = NULL;40
ptr -> next = ptr1;41
ptr = ptr ->next;42
}43
return head;44
}45

46
/*链表的节点遍历*/47
llink findnode(llink head,int num)48
{49
llink ptr;50
51
ptr = head;52
while(ptr != NULL)53
{54
if(ptr->num == num)55
return ptr;56
ptr = ptr->next;57
}58
return ptr;59
}60

61
/*链表的输出*/62
void printllist(llink ptr)63
{64
while(ptr != NULL)65
{66
printf("Number:[%d]\n",ptr->num);67
printf("Name:%s",ptr->name);68
ptr = ptr->next;69
printf("\n");70
}71
}72

73
/*指定节点的删除*/74
llink deletenode(llink head,llink ptr)75
{76
llink previous;77
78
if(ptr == head) //如果是第一个节点79
return head->next;80
else81
{82
previous = head;83
while(previous -> next != ptr) //找到需要查找节点的前一个节点84
previous = previous->next;85
86
if(ptr->next == NULL) //链表是否结束87
//删除最后一个结点88
previous->next = NULL;89
else90
//删除中间一个节点91
previous->next = ptr->next;92
}93
return head;94
}95

96

97
void main()98
{99
llink head;100
llink ptr;101
int num;102
103
head = createllist();104
if(!head)105
{106
printf("内存分配失败!\n");107
exit(1);108
}109
printf("原来的链表:\n");110
printllist(head);111
while(1)112
{113
printf("请输入要删除的邮寄编号 ==> ");114
scanf("%d",&num);115
if(num != -1)116
{117
ptr = findnode(head,num);118
if(!ptr)119
printf("没有找到\n");120
else121
{122
head = deletenode(head,ptr);123
printf("删除后的链表:\n");124
printllist(head);125
}126
}127
else128
exit(1);129
}130
}
C#代码:
1
using System;
2![]()
3
class Node
4
{
5
private int num;
6
7
public int Num
8
{
9
set{num = value;}
10
get{return num;}
11
}
12
13
private string name;
14
15
public string Name
16
{
17
set{name = value;}
18
get{return name;}
19
}
20
21
private Node next;
22
23
public Node Next
24
{
25
set{next = value;}
26
get{return next;}
27
}
28
29
public void Print()
30
{
31
Console.WriteLine("编号:[{0}]",num);
32
Console.WriteLine("姓名:{0}",name);
33
}
34
}
35![]()
36
class Llist
37
{
38
//链表的创建
39
public static Node CreateLlist()
40
{
41
Node head;
42
Node tempNode,tempNode1;
43
int i;
44
45
head = new Node();
46
Console.WriteLine("请输入六项邮寄数据:\n");
47
Console.WriteLine("请输入编号==>");
48
head.Num = Convert.ToInt32(Console.ReadLine());
49
Console.WriteLine("请输入编号({0})的姓名 ==>",head.Num);
50
head.Name = Console.ReadLine();
51
head.Next = null;
52
tempNode = head;
53
for( i = 1 ;i < 6; i++)
54
{
55
tempNode1 = new Node();
56
Console.WriteLine("请输入编号 ==>");
57
tempNode1.Num = Convert.ToInt32(Console.ReadLine());
58
Console.WriteLine("请输入编号({0})的姓名",tempNode1.Num);
59
tempNode1.Name = Console.ReadLine();
60
tempNode1.Next = null;
61
tempNode.Next = tempNode1;
62
tempNode = tempNode.Next;
63
}
64
return head;
65
}
66
67
//链表的节点遍历
68
public static Node FindNode(Node head,int num)
69
{
70
Node tempNode;
71
72
tempNode = head;
73
while(tempNode != null)
74
{
75
if(tempNode.Num == num)
76
return tempNode;
77
tempNode = tempNode.Next;
78
}
79
return tempNode;
80
}
81
82
//链表的输出
83
public static void PrintLlist(Node tempNode)
84
{
85
while( tempNode != null)
86
{
87
tempNode.Print();
88
tempNode = tempNode.Next;
89
}
90
Console.WriteLine();
91
}
92
93
//链表内指定节点的删除
94
public static Node DeleteNode(Node head,Node tempNode)
95
{
96
Node previous;
97
98
if(tempNode == head) //如果是第一个节点
99
return head.Next;
100
else
101
{
102
previous = head;
103
while(previous.Next != tempNode) //找到需要查找节点的前一个节点
104
previous = previous.Next;
105
106
if(tempNode.Next == null) //链表是否结束
107
previous.Next = null; //删除最后一个结点
108
else
109
previous.Next = tempNode.Next; //删除中间一个节点
110
}
111
return head;
112
}
113
114
}
115![]()
116
class Test
117
{
118
public static void Main()
119
{
120
Node head;
121
Node tempNode;
122
int num;
123
124
head = Llist.CreateLlist();
125
Console.WriteLine("原来的链表:");
126
Llist.PrintLlist(head);
127
while(true)
128
{
129
Console.WriteLine("请输入要删除的邮寄编号 ==>");
130
num = Convert.ToInt32(Console.ReadLine());
131
if(num != -1)
132
{
133
tempNode = Llist.FindNode(head,num);
134
if(tempNode == null)
135
Console.WriteLine("没有找到\n");
136
else
137
{
138
head = Llist.DeleteNode(head,tempNode);
139
Console.WriteLine("删除后的链表:");
140
Llist.PrintLlist(head);
141
}
142
}
143
else
144
break;
145
}
146
}
147
}
using System;2

3
class Node4
{5
private int num;6
7
public int Num8
{9
set{num = value;}10
get{return num;}11
}12
13
private string name;14
15
public string Name16
{17
set{name = value;}18
get{return name;}19
}20
21
private Node next;22
23
public Node Next24
{25
set{next = value;}26
get{return next;}27
}28
29
public void Print()30
{31
Console.WriteLine("编号:[{0}]",num);32
Console.WriteLine("姓名:{0}",name);33
} 34
}35

36
class Llist37
{38
//链表的创建39
public static Node CreateLlist()40
{41
Node head;42
Node tempNode,tempNode1;43
int i;44
45
head = new Node();46
Console.WriteLine("请输入六项邮寄数据:\n");47
Console.WriteLine("请输入编号==>");48
head.Num = Convert.ToInt32(Console.ReadLine());49
Console.WriteLine("请输入编号({0})的姓名 ==>",head.Num);50
head.Name = Console.ReadLine();51
head.Next = null;52
tempNode = head;53
for( i = 1 ;i < 6; i++)54
{55
tempNode1 = new Node();56
Console.WriteLine("请输入编号 ==>");57
tempNode1.Num = Convert.ToInt32(Console.ReadLine());58
Console.WriteLine("请输入编号({0})的姓名",tempNode1.Num);59
tempNode1.Name = Console.ReadLine();60
tempNode1.Next = null;61
tempNode.Next = tempNode1;62
tempNode = tempNode.Next;63
}64
return head;65
}66
67
//链表的节点遍历68
public static Node FindNode(Node head,int num)69
{70
Node tempNode;71
72
tempNode = head;73
while(tempNode != null)74
{75
if(tempNode.Num == num)76
return tempNode;77
tempNode = tempNode.Next;78
}79
return tempNode;80
}81
82
//链表的输出83
public static void PrintLlist(Node tempNode)84
{85
while( tempNode != null)86
{87
tempNode.Print();88
tempNode = tempNode.Next;89
}90
Console.WriteLine();91
}92
93
//链表内指定节点的删除94
public static Node DeleteNode(Node head,Node tempNode)95
{96
Node previous;97
98
if(tempNode == head) //如果是第一个节点99
return head.Next;100
else101
{102
previous = head;103
while(previous.Next != tempNode) //找到需要查找节点的前一个节点104
previous = previous.Next;105
106
if(tempNode.Next == null) //链表是否结束107
previous.Next = null; //删除最后一个结点108
else109
previous.Next = tempNode.Next; //删除中间一个节点110
}111
return head; 112
}113
114
}115

116
class Test117
{118
public static void Main()119
{120
Node head;121
Node tempNode;122
int num;123
124
head = Llist.CreateLlist();125
Console.WriteLine("原来的链表:");126
Llist.PrintLlist(head);127
while(true)128
{129
Console.WriteLine("请输入要删除的邮寄编号 ==>");130
num = Convert.ToInt32(Console.ReadLine());131
if(num != -1)132
{133
tempNode = Llist.FindNode(head,num);134
if(tempNode == null)135
Console.WriteLine("没有找到\n");136
else137
{138
head = Llist.DeleteNode(head,tempNode);139
Console.WriteLine("删除后的链表:");140
Llist.PrintLlist(head);141
}142
}143
else144
break;145
}146
}147
}


浙公网安备 33010602011771号