leetcode题目4:Reorder List
2014-09-16 21:17
323 查看
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
题意很好理解,就是讲链表按照顺序重新排序,我的思路是利用两个指针,一个指向表头,一个指向表尾,表头先入栈然后指向下一个元素,然后表尾入栈,指向倒数第二个元素,做循环直至两个指针相遇,此时栈中的元素应该是排好序的
AC代码:
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}.
题意很好理解,就是讲链表按照顺序重新排序,我的思路是利用两个指针,一个指向表头,一个指向表尾,表头先入栈然后指向下一个元素,然后表尾入栈,指向倒数第二个元素,做循环直至两个指针相遇,此时栈中的元素应该是排好序的
AC代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: void reorderList(ListNode *head) { if(!head||!head->next)return; list<ListNode*>order,reorder; ListNode *p=head; for(p;p;p=p->next) order.push_back(p); list<ListNode*>::iterator front,back; front=order.begin(); back=--order.end(); while(front!=back) { if(front!=back) { reorder.push_back(*front); front++; } if(front!=back) { reorder.push_back(*back); back--; } } reorder.push_back(*front); front=reorder.begin(); ListNode *q=*front; p=q; for(front++;front!=reorder.end();front++) { p->next=*front; p=p->next; } p->next=NULL; head=q; } };
相关文章推荐
- leetcode题目:Reorder List
- LeetCode中几道链表反转相关题目(Reorder List、Rotate List、Reverse Nodes in k-Group)
- [LeetCode]Reorder List
- leetcode之Reorder List
- LeetCode题解:Reorder List
- [leetcode]Reorder List
- Reorder List [LeetCode]
- leetcode -- Reorder List
- LeetCode:Reorder List
- LeetCode Reorder List O(n) space空间解法
- LeetCode Reorder List 新鲜出炉问题的解答
- [LeetCode]Reorder List
- leetcode Reorder List
- [LeetCode] Reorder List
- LeetCode-Reorder List
- [LeetCode] Reorder List
- LeetCode | Reorder List
- LeetCode: Reorder List
- Leetcode: Reorder List
- Leetcode: Reorder List