/**
* 给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。
*
* 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。
*
* 对于 n = 1、2、3、4 和 5 的情况,中间节点的下标分别是 0、1、1、2 和 2
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode.cn/problems/delete-the-middle-node-of-a-linked-list
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public class DeleteMiddle {
/**
* 题解:
* 使用快慢指针的方式完成.cur指针每往后移动两个节点,middle只移动一个节点.在cur处于最后一个节点的时候,middle的下一个即为需要跳过的节点.
* @param head
* @return
*/
public ListNode deleteMiddle(ListNode head) {
if (head == null || head.next == null) {
return null;
}
ListNode cur = head.next;
ListNode middle = head;
while (cur.next!= null && cur.next.next!= null) {
cur = cur.next.next;
middle = middle.next;
}
return middle;
}
private class ListNode {
ListNode next;
}
}