题解 | #重排链表#

重排链表

http://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b

左右指针,平民解法,欢迎指正。

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public void reorderList(ListNode head) {
         /*
         1L-2-3-4-5-6R
         1L 6R-2-3-4-5
         1 6R 2L 3 4 5
         1 6 2L 3 4 5R
         1 6 2L 5R 3 4
         1 6 2 5R 3L 4
         1 6 2 5 3L 4R
        *
         1L 2 3 4 5R
         1L 5R 2 3 4
         1 5L 2 3 4R
         1 5 2L 3 4R
         1 5 2L 4R 3
         1 5 2 4R 3L
         1 5 2 4 3LR

         1L-2-3R
         1L-3R-2
         1 3R 2L
         1 3 2LR
        * */
        //0
        if(head == null){
            return;
        }
        ListNode left = head;
        ListNode right = head;
        ListNode preLast = head;
        //使right在尾部
        while(right.next != null){
            preLast = right;
            right = right.next;
        }
        while (!(left == right || left.next == right)){
            right.next = left.next;
            left.next = right;
            preLast.next = null;//新尾部
            left = right.next;
            //使right一直在尾部
            while(right.next != null){
                preLast = right;
                right = right.next;
            }
        }
        
    }
}
全部评论

相关推荐

猫头夜鹰:图书管理系统能有面试就怪了,放十年前都不行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务