LeetCode.143 Reorder List

来源:互联网 发布:淘宝上买的轮毂可靠吗 编辑:程序博客网 时间:2024/05/16 10:25

题目:

Given a singly linked list LL0?L1?…?Ln-1?Ln,
reorder it to: L0?Ln?L1?Ln-1?L2?Ln-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}.

分析:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {    public void reorderList(ListNode head) {        //按照给定规则输出链表        //思想:将链表对半,后半部分逆转,之后交叉拼接        if(head==null||head.next==null) return;                ListNode fast=head,slow=head,pre=null;        //对折        while(fast!=null&&fast.next!=null){            pre=slow;            slow=slow.next;            fast=fast.next.next;        }                //断链        if(pre!=null){            pre.next=null;        }                ListNode temp=null;        //若存在后半部分        //将后半部分逆转(slow!=head表示后半部分存在)        while(slow!=null&&slow!=head){                ListNode next=slow.next;                slow.next=temp;                temp=slow;                slow=next;        }           //赋值        slow=temp;                //将前半部分和后半部分合并        ListNode dummy=new ListNode(0);        ListNode cur=dummy;        while(head!=null&&slow!=null){            cur.next=head;            head=head.next;            cur=cur.next;            cur.next=slow;            slow=slow.next;            cur=cur.next;        }        if(head!=null) cur.next=head;        if(slow!=null) cur.next=slow;                //返回结果        head=dummy.next;            }}


原创粉丝点击