【Leetcode】143. Reorder List

Given a singly linked list LL0→L1→…→Ln-1→Ln,

reorder it to: L0→LnL1→Ln-1→L2→Ln-2→…

You may not modify the values in the list's nodes, only nodes itself may be changed.

1 使用快慢指针,找到中间节点,将后半链表reverse,再依次将后半链表的值插入到前半链表中

2 使用快慢指针的原理是,快指针一下走两步,慢指针一下走一步,当fast指针走到最后的时候,slow指针就走到了中间节点。分为两种情况,node个数是奇数的时候,fast走到最后一个节点,slow刚好走到中间节点;node个数是偶数的时候,fast走到最后一个的下一个的时候,slow走到中间偏右的那个node

3 reverse后半链表:逆序的时候需要处理三个指针,当前node,当前node.next,pre,对于下一个operation,当前node成为pre,node.next成为node,pre成为node.next 。初始化node为slow,pre为None

4 当reverse后半链表的时候,中间的连接是断了的

5 最后一步操作就是合并两个链表:

你可能感兴趣的:(【Leetcode】143. Reorder List)