美文网首页
Leetcode系列之链表(1)

Leetcode系列之链表(1)

作者: FisherTige_f2ef | 来源:发表于2019-10-14 18:06 被阅读0次

    1.题目

    将给定的单链表L: L 0→L 1→…→L n-1→L n,重新排序为: L 0→L n →L 1→L n-1→L 2→L n-2→…

    要求使用原地算法,并且不改变节点的值

    例如:

    对于给定的单链表{1,2,3,4},将其重新排序为{1,4,2,3}.

    思路:

    1.找出中点,拆分列表(利用快慢指针)

    2.中点后的链表反转(链表的翻转)

    3.按要求合并链表(链表的合并)

    代码:

    /**

    * 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) {

            if(head == null || head.next == null)

                return;

            // 找中点

            ListNode mid = findMiddle(head);

            // 中点后的链表反转

            ListNode rev = reverse(mid);

            // 两个链表合并

            merge(head,rev);

        }

        private static ListNode findMiddle(ListNode head){

            ListNode slow = head;

            ListNode fast = head;

            while(fast.next != null && fast.next.next != null){

                slow = slow.next;

                fast = fast.next.next;

            }

            return slow;

        }

        private static ListNode reverse(ListNode cur){

            ListNode pre = null;

            ListNode next = cur;

            while(next != null){

                next = cur.next;

                cur.next = pre;

                pre = cur;

                cur = next;

            }

            return pre;

        }

        private static void merge(ListNode head, ListNode rev){

            ListNode headNext = null;

            ListNode revNext = null;

            while(head != null && rev != null){

                headNext = head.next;

                revNext = rev.next;

                head.next = rev;

                rev.next = headNext;

                head = headNext;

                rev = revNext;

            }

        }

    }

    相关文章

      网友评论

          本文标题:Leetcode系列之链表(1)

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