leetcode_143_Reorder List

来源:互联网 发布:格罗兹尼巷战 知乎 编辑:程序博客网 时间:2024/05/29 13:26

描述:

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.求出链表的长度
2.将后半部分结点依次入栈
3.将栈里的元素依次插入到前面的结点后面

代码:

public void reorderList(ListNode head) { if(head==null||head.next==null) return; ListNode pListNode=head,tempListNode=null; Stack<ListNode>stack=new Stack<ListNode>(); int count=0,i=0; while(pListNode!=null) { count++; pListNode=pListNode.next; } int subLen=count/2+1; pListNode=head; for(i=1;i<subLen;i++) pListNode=pListNode.next; tempListNode=pListNode.next; pListNode.next=null; while(tempListNode!=null) { stack.push(tempListNode); tempListNode=tempListNode.next; } pListNode=head; while(!stack.empty()) { tempListNode=stack.peek(); stack.pop(); tempListNode.next=pListNode.next; pListNode.next=tempListNode; pListNode=tempListNode.next; } }


结果:

0 0