/**
* Created by lxw, liwei4939@126.com on 2017/10/27.
* 若删除一链表的某一节点,需要找到该节点对应的前一个结点,
* 故删除链表的中间节点是找到该链表中间结点的变形,使用快
* 慢指针找到中间结点的前一个节点
*/
public class RemoveMidNode {
public class Node{
public int value;
public Node next;
public Node(int data){
this.value = data;
}
}
public Node removeMidNode(Node head){
if(head == null || head.next == null)
return head;
if(head.next.next == null)
return head.next;
Node pre = head;
Node cur = head.next.next;
while (cur.next != null && cur.next.next != null){
pre = pre.next;
cur = cur.next.next;
}
pre.next = pre.next.next;
return head;
}
}
PS:标准的快慢指针如上图所示
删除中间结点的快慢指针如下图所示
fast | 3 | 5 | 7 | 9 |
slow | 1 | 2 | 3 | 4 |
fast | 1 | 3 | 5 | 7 |
slow | 1 | 2 | 3 | 4 |