HUA-1-183-链表操作

Description

输入一串int类型的数字以-1结束输入,将读取的不重复的数字构建成链表。并按照指示删除指定数字的节点,最后将剩余的链表的数字依次输出。

Input

输入要求链表的输入用-1结束,将不重复的数字构建成链表,比如 1 2 1 2 5 6 4 -1 构建成的链表 1 2 5 6 4;

接着输入要删除的数字。

Output

输出删除指定数字后的链表,中间用空格隔开,最后一个数字有空格。

Sample Input 1

1
2
1 2 3 4 5 6 5 4 6 -1
4

Sample Output 1

1
1 2 3 5 6

Code

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
#include <iostream>
struct node {
int data;
node* next;
node() {}
node(int _data) :data(_data),next(0) {}
};

bool is_exist(node* list1,int target) {
node* temp = list1;
if (!temp->next)
return false;
temp = temp -> next;

while (temp!=0) {
if (temp->data == target)
return 1;
temp = temp->next;
}
return false;
}

void deletenode(node* list1,int n) {
node* temp = list1;
node* pre_delete = temp;//删除节点的前驱节点
if (!temp->next)
return;

temp = temp->next;
while (temp != 0) {
if (temp->data == n) {
pre_delete->next = temp->next;
delete(temp);
return;
}
pre_delete = temp;
temp = temp->next;
}
}

int main() {
int n, delete_n;
node* p , * pre, * head;//p为当前节点,pre表示当前节点的前驱节点,head为头节点
head = new node(0);//头节点不存储数据
pre = head;
while (1) {
scanf("%d", &n);
if (n == -1)
break;


if (is_exist(head,n))
continue;
p = new node(n);
pre->next = p;
pre = p;
}

scanf("%d", &delete_n);
deletenode(head,delete_n);

p = head->next;
while (p!=NULL) {
printf("%d ", p->data);
p = p->next;
}

return 0;
}

----\(˙<>˙)/----赞赏一下吧~