Reorder List 微软2014校园招聘笔试题
2014-08-31 21:32
363 查看
Given a singly linked list L: L0→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
reorder it to
这个题是微软2014校园招聘笔试题,也是leetcode 一道经典题。这篇博文我用一个很笨的方法实现了这道题:
/article/2310678.html
今天再次碰到这个题尝试用更好的方法进行实现,算法思想:把链表分为两部分,后面部分进行链表逆置,然后进行两个链表合并。
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}.
这个题是微软2014校园招聘笔试题,也是leetcode 一道经典题。这篇博文我用一个很笨的方法实现了这道题:
/article/2310678.html
今天再次碰到这个题尝试用更好的方法进行实现,算法思想:把链表分为两部分,后面部分进行链表逆置,然后进行两个链表合并。
public class Solution { public void reorderList(ListNode head) { if(head==null || head.next==null){ return ; } ListNode slow = head; ListNode fast = head; // fast slow 步伐不同链表分为前后两部分 while(fast!=null && fast.next!=null){ slow = slow.next; fast = fast.next.next; } ListNode reverseListNode = reverse(slow.next); slow.next = null; ListNode cur = head; // 合并前后两条链表 while(reverseListNode!=null){ ListNode temp = reverseListNode.next; reverseListNode.next = cur.next; cur.next = reverseListNode; cur = cur.next.next; reverseListNode = temp; } } public ListNode reverse(ListNode head){ if(head == null || head.next ==null){ return head; } ListNode pre = null; ListNode cur = head; ListNode next = null; while(cur!=null){ next = cur.next; cur.next = pre; pre = cur; cur = next; } return pre; } }
相关文章推荐
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题
- [历年IT笔试题]2014微软校园招聘笔试试题
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题
- [转]微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试题
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题
- 2014微软校园招聘笔试试题(英文)
- 微软2014校园招聘笔试题
- 微软2014校园招聘笔试编程题
- 微软2014校园招聘笔试试题及答案分析
- 微软2014校园招聘笔试题
- 微软2014校园招聘笔试试题
- 微软2014校园招聘笔试试题