从链表中删除一个节点

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
35
36
37
38
39
/**
* 从链表中删除一个节点
*
* @param head 链表的头指针
* @param data 要删除的节点中的数据
* @return 删除指定节点后的链表的头指针。
*/
public static Node deleteNodeInLink(Node head, int data) {
// 如果要删除的是头节点
if (head.data == data) {
// 头指针向后移动一格,越过头节点,也就从链表中删除该节点
head = head.next;
return head;
}
// 如果不是头节点
// 当前遍历的节点的前一个节点
Node previous = head;
// 当前遍历的节点
Node current = previous;
// 如果当前节点后面有节点的话
while (current.next != null) {
// 移动到后一个节点
current = current.next;
// 如果找到要删除的节点
if (current.data == data) {
// 前面的链表 断开与要删除的节点的之间的连接
previous.next = null;
// 把要删除的节点后面的节点接到它前面的节点上
previous.next = current.next;
// 断开要删除的节点和它后面的节点之间的连接
current.next = null;
// 已经删除好了,退出
return head;
} else {
previous = current;
}
}
return head;
}