leetcode Reorder List
2014-08-01 16:14
357 查看
本题的思路:
1.将原链表从中间分成两个链表A,B。
2.逆置B,此处可根据逆序伐穿件链表来做。
3.然后针对每个元素依次合并A,B。
代码
1.将原链表从中间分成两个链表A,B。
2.逆置B,此处可根据逆序伐穿件链表来做。
3.然后针对每个元素依次合并A,B。
代码
ListNode* reverseList(ListNode*head) { ListNode* p, *headtemp; p = head; headtemp = new ListNode(0); while(p!=NULL) { ListNode * q; q = p; p = p->next; q->next = headtemp->next; headtemp->next = q; } return headtemp->next; } ListNode * mergeLists(ListNode *head1, ListNode *head2) { ListNode *pnext1, *pnext2, *p, *q; pnext1 = head1; pnext2 = head2; q = new ListNode(0); p = q; while(pnext1!=NULL&&pnext2!=NULL) { p ->next = pnext1; pnext1 = pnext1->next; p = p->next; p->next = pnext2; pnext2 = pnext2->next; p = p->next; } if(pnext1!=NULL) p->next = pnext1; if(pnext2!=NULL) p->next = pnext2; return q->next; } ListNode* reorderList(ListNode *head) { if(head==NULL) return ; ListNode *fast, *slow, *last; slow = head; fast = head; while(slow->next!=NULL&&fast->next!=NULL&&fast->next->next!=NULL) { slow = slow->next; fast = fast->next->next; } ListNode * head2; head2 = slow->next; slow->next = NULL; //反转后半部分链表 head2 = reverseList(head2); //合并两个链表 head = mergeLists(head, head2); }
相关文章推荐
- LeetCode(143)Reorder List
- Leetcode Reorder List
- LeetCode_reorderList
- 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
- Reorder List [leetcode] 的两种思路
- LeetCode | Reorder List
- LeetCode 之 Reorder List
- LeetCode OJ Reorder List
- LeetCode:Reorder List
- Leetcode之reorder-list
- leetcode Reorder List