题目:
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example 1:
Given 1->2->3->4, reorder it to 1->4->2->3.
Example 2:
Given 1->2->3->4->5, reorder it to 1->5->2->4->3.
代码:
/**
* 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 == NULL || head->next == NULL)
return;
stack<ListNode*> s;
ListNode *p, *q, *r;
for(p = head; p!=NULL; p = p->next)
s.push(p);
int num = s.size();
p = head;
for(int i = 0; i < num/2; i++)
{
if(i == num - 1 && num % 2 == 0)
{
p = p->next;
break;
}
q = s.top();
s.pop();
r = p->next;
p->next = q;
q->next = r;
p = r;
}
p->next = NULL;
return;
}
};