美文网首页
143. 重排链表

143. 重排链表

作者: 最困惑的时候就是能成长的时候 | 来源:发表于2020-05-17 11:58 被阅读0次

题目地址

1.想法

1.从题目的题意可知,我们需要三步,

step 1:将现有的链表分成两个部分1.L0→L中 2.L中+1→Ln(寻找链表的中间节点) 快慢指针
step 2:翻转后一部分的链表(翻转链表) 翻转链表
step 3:合并这两部分链表(链表合并)

2.代码

class Solution {
    public void reorderList(ListNode head) {
        //极端情况
        if(head == null||head.next == null)return;
        //1.找到中间节点
        ListNode midHead = getMidNode(head);
        ListNode midNext = midHead.next;
        midHead.next = null;
        //2.翻转后面的列表
        ListNode midNextHead = reverseNode(midNext);
        //3.结合两个链表
        ListNode temp = head,l0 = head.next,l1 = midNextHead;
        temp.next = l1;
        l1= l1.next;
        temp = temp.next;
        while(l1!=null){
            temp.next = l0;
            l0 = l0.next;
            temp = temp.next;
            temp.next =l1;
            l1 = l1.next;
            temp = temp.next;
        }
        if(l0!=null){
            temp.next = l0;
        }
    }

    private ListNode reverseNode(ListNode midNext) {
        ListNode pre = null,now = midNext,next = now.next;
        while(next!=null){
            now.next = pre;
            pre = now;
            now = next;
            next = now.next;
        }
        now.next = pre;
        return now;
    }

    private ListNode getMidNode(ListNode head) {
        ListNode mid = head;
        int count = 1;
        while(head.next!=null){
            head = head.next;
            count++;
            if(count%2!=0){
                mid = mid.next;
            }
        }
        return mid;
    }

}

相关文章

  • 143. 重排链表

    143. 重排链表

  • 143. 重排链表

    给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln...

  • 143. 重排链表

    题目地址 1.想法 1.从题目的题意可知,我们需要三步, step 1:将现有的链表分成两个部分1.L0→L中 2...

  • 143. 重排链表

    143. 重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→...

  • LeetCode 143. 重排链表

    143. 重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→...

  • leetcode 143. 重排链表

    题目描述 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→...

  • LeetCode 143. 重排链表

    题目 给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → ...

  • 68. LeetCode 143. 重排链表

    标签: 链表 双指针 难度: 中等 题目描述 我的解法 【step1】先用快慢指针(p1, p2)确定中间节点...

  • 2021-03-03 143. 重排链表

    题目地址 https://leetcode-cn.com/problems/reorder-list/[https...

  • python实现leetcode之143. 重排链表

    解题思路 三步走:第一步,找到中点,使用快慢指针第二步,后半部分逆序第三步,合并前后两个半部分,直到到达中间位置 ...

网友评论

      本文标题:143. 重排链表

      本文链接:https://www.haomeiwen.com/subject/upijohtx.html