leetcode reorderList Given{1,2,3,4}, reorder it to{1,4,2,3}.

来源:互联网 发布:mysql主键有什么用 编辑:程序博客网 时间:2024/05/29 06:43

Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-2→…

You must do this in-place without altering the nodes' values.

For example,
Given{1,2,3,4}, reorder it to{1,4,2,3}.


解题思想:


1.将原链表从中间一分为二,得到left,right两个子链表
2.对于left链表元素顺序不变,right链表反转
3.将right的表头和left的表头逐一取出,拼接在一起形成新表

例如:7,3,8,7,9,1,6,2,10
left
7--3--8--7---9
right
10--2--6--1
插入步骤:
7-10
7-10-3-2
7-10-3-2-8-6
7-10-3-2-8-6-7-1
7-10-3-2-8-6-7-1-9

java代码实现:


/** * 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){         ListNode temp=middlePos(head);        ListNode right=temp.next;        right=inverseList(right);                ListNode left=head;         temp.next=null;        ListNode cur=head=new ListNode(-1);                         while(right!=null){            ListNode leftnex=left.next;            ListNode rightnex=right.next;            left.next=null;             right.next=null;                 cur.next=left;                 cur.next.next=right;                 cur=cur.next.next;                             left=leftnex;                 right=rightnex;           }           if(left!=null){         cur.next=left;           }        }        //cur.next=null;     }     public ListNode middlePos(ListNode head){         //find the right half list                  ListNode low=head;         ListNode fast=head;         while(fast!=null && fast.next!=null){             low=low.next;             fast=fast.next.next;         }         return low;     }          public ListNode inverseList(ListNode head){     ListNode front=null;     ListNode cur=null;          while(head!=null){     cur=head;     head=head.next;     cur.next=null;     cur.next=front;     front=cur;     }     return front;     }}


Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-2→…

You must do this in-place without altering the nodes' values.

For example,
Given{1,2,3,4}, reorder it to{1,4,2,3}.

0 0
原创粉丝点击