[LeetCode]Reorder List

来源:互联网 发布:广东省委党校 知乎 编辑:程序博客网 时间:2024/05/16 08:16

https://leetcode.com/problems/reorder-list/

三步走,找中间节点,翻转后半部分,前后两部分依次插入


/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public void reorderList(ListNode head) {        if (head == null || head.next == null) return;        ListNode mid = head, tail = head.next.next;        while (tail != null && tail.next != null) {            mid = mid.next;            tail = tail.next.next;        }        ListNode rHead = reverse(mid.next);        ListNode head1 = head;        mid.next = null;        ListNode res = new ListNode(0);        while (head1 != null && rHead != null) {            res.next = head1;            // 涉及指针部分,一步一移,如果把下面两行顺序调换就会出错            head1 = head1.next;            res.next.next = rHead;            rHead = rHead.next;            res = res.next.next;        }    }    private ListNode reverse(ListNode node) {        if (node == null) return node;        ListNode cur = node.next, next = null;        node.next = null;        while (cur != null) {            next = cur.next;            cur.next = node;            node = cur;            cur = next;        }        return node;    }}


0 0
原创粉丝点击