一个在3后面插入4,然后删除所有4的程序,哈哈哈

前言

添4删4,4不4有冰

在链表这里卡了老长时间,终于没有Bug了:)


代码实现

如图
程序运行1

程序运行2

一、代码介绍

这个程序可以输入一串数字(以-1结尾代表结束),然后在3后面插入4,然后删除所有的4,使用了c++的函数,结构体,指针,链表
用到了单向链表的插入和删除等功能

二、代码部分

1.插入函数

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 在链表中插入一个节点,节点值为num2+1
void insert(node* head, int num2)
{
node *tmp = nullptr, *tail = nullptr;
tail = head->next;
// 遍历链表,找到节点值为num2的位置
while (tail->next != nullptr)
{
tmp = new node({num2 + 1, nullptr});
if (tail->num == num2)
{
tmp->next = tail->next;
tail->next = tmp;
}
tail = tail->next;
}
tmp = new node({num2 + 1, nullptr});
if (tail->num == num2)
{
tmp->next = tail->next;
tail->next = tmp;
}
return;
}

2.删除函数

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void del(node* head, int num)
{
node *tmp = nullptr, *tail = nullptr;
tail = head;
// 遍历链表,找到节点值为num的位置并删除
while (tail->next->next != nullptr && tail->next != nullptr)
{
if (tail->next->num == num)
{
tmp = tail->next;
tail->next = tail->next->next;
delete tmp;
}
else
{
tail = tail->next;
}
}
if (tail->next->num == num)
{
tmp = tail->next;
tail->next = nullptr;
delete tmp;
}
return;
}

注意tail=tail->next一定要放在else里面,要不然就会像我一样找了半天Bug

3.完整代码

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
@[TOC](初学链表,尝试插入、删除、循环)
## 前言
### 在链表这里卡了老长时间,终于没有Bug了:)
## 代码介绍
### 本代码
## 代码部分

```cpp
#include <iostream>
using namespace std;

struct node
{
int num;
node *next;
};

// 在链表中插入一个节点,节点值为num2+1
void insert(node* head, int num2)
{
node *tmp = nullptr, *tail = nullptr;
tail = head->next;
// 遍历链表,找到节点值为num2的位置
while (tail->next != nullptr)
{
tmp = new node({num2 + 1, nullptr});
if (tail->num == num2)
{
tmp->next = tail->next;
tail->next = tmp;
}
tail = tail->next;
}
tmp = new node({num2 + 1, nullptr});
if (tail->num == num2)
{
tmp->next = tail->next;
tail->next = tmp;
}
return;
}

// 在链表中删除指定节点
void del(node* head, int num)
{
node *tmp = nullptr, *tail = nullptr;
tail = head;
// 遍历链表,找到节点值为num的位置并删除
while (tail->next->next != nullptr && tail->next != nullptr)
{
if (tail->next->num == num)
{
tmp = tail->next;
tail->next = tail->next->next;
delete tmp;
}
else
{
tail = tail->next;
}
}
if (tail->next->num == num)
{
tmp = tail->next;
tail->next = nullptr;
delete tmp;
}
return;
}

int main()
{
node *head = nullptr, *tail = nullptr, *tmp = nullptr;
int x = -1;
cin >> x;
head = new node({x, nullptr});
tail = head;
while (x != -1)
{
tmp = new node({x, nullptr});
tail->next = tmp;
tail = tmp;
cin >> x;
}

insert(head, 3); // 在链表中插入节点值为4的节点
del(head, 4); // 删除链表中节点值为4的节点

tmp = head->next;
while (tmp != nullptr)
{
cout << (*tmp).num << " "; // 输出链表节点的值
tmp = tmp->next;
}

return 0;
}

}

总结

链表是个好东西~~