1 /**
2 * 在O(1)的时间删除链表的节点
3 *
4 * @author
5 *
6 */
7 public class Solution {
8
9 public static void deleteNode(Node head, Node deletedNode) {
10 if (null == head || null == deletedNode) {
11 return;
12 }
13
14 if (deletedNode.next != null) { // 删除的不是尾节点
15
16 System.out.println("1-----");
17
18 Node nextNode = deletedNode.next;
19 deletedNode.value = nextNode.value;
20 deletedNode.next = nextNode.next;
21
22 } else if (head == deletedNode) { // 删除的是尾节点,同时尾节点也是头节点,整个链表只有一个节点
23
24 System.out.println("2-----");
25
26 head = null;
27 deletedNode = null;
28
29 } else { // 删除的是尾节点,但是链表不止一个节点
30
31 System.out.println("3-----");
32
33 // 遍历链表,找出尾节点的前一个节点,将next置为null
34 Node pNode = head;
35 while (pNode.next != deletedNode) {
36 pNode = pNode.next;
37 }
38
39 pNode.next = null;
40 deletedNode = null;
41 }
42 }
43
44 public static void main(String[] argss) {
45
46 Node third = new Node(2, null);
47 Node second = new Node(1, third);
48 Node first = new Node(0, second);
49
50 deleteNode(first, third);
51
52 }
53 }
54
55 class Node {
56
57 int value;
58 Node next;
59
60 public Node(int value, Node next) {
61 this.value = value;
62 this.next = next;
63 }
64
65 }