您的位置:首页 > 其它

LeetCode Reorder List

2014-04-17 18:27 246 查看
[b]Problem Description[/b]


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
{1,2,3,4}
, reorder it to
{1,4,2,3}
.



[b]Problem Solution[/b]

Note: 引入STL list结构来存储链表结点的值,然后通过重排规则改变结点值的顺序并存储在list中,最后再将改变后List中值存储到原linked list中,完成整个操作

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
private:
list<int> intList;
public:

void reorderList(ListNode *head) {
if(head==NULL || head->next==NULL)
return;
ListNode *p=head;
int listSize=0;
while(p)
{
intList.push_back(p->val);
p=p->next;
listSize++;
}
list<int> tmpList; //setup a new list to store the target value
list<int>::iterator iterBegin=intList.begin();
for(int i=0;i<listSize/2;++i) //traverse the first half of list
{
tmpList.push_back(*iterBegin++); //first push the begin value of list
tmpList.push_back(intList.back()); //second push the last value of list
intList.pop_back(); //third, pop the last value of list
}
if(listSize%2) //if the list size is odd, last value of list need to be pushed
tmpList.push_back(intList.back());
p=head;
list<int>::iterator tIter=tmpList.begin();
while(p && tIter != tmpList.end())  //traverse the list and change its value
{
p->val=*tIter++;
p=p->next;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: