从链表中删除节点,如果有重复则全部删除

Java代码

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
/**
* 删除所有查找到的节点
*
* @param head 链表的头指针
* @param data 要删除的节点的数值
* @return 删除链表中的所有符合的节点后的链表的头指针。
*/
public static Node delectAllNodeInLink(Node head, int data) {
// 要删除的是头节点的情况
while (head.data == data) {
// 头指针后移,越过该节点
head = head.next;
}
// 如果要删除的是中间的节点
// 没有重复的前一个节点的指针
Node p = head;
// 当前节点的指针
Node c = p;
// 当前节点的后面还有节点时
while (c.next != null) {
// 当前节点向前走一步
c = c.next;
if (c.data == data) {
// 断开前面的链表与当前链表的连接
p.next = null;
// 当前节点后面的链表接到当前节点前面的链表的尾巴上
p.next = c.next;
} else {
// 保存下当前遍历的节点,以便下次遍历的时候知道它上一个节点是谁
p = c;
}
}
return head;
}