您的位置:首页 > 其它

Reorder List [LeetCode]

2013-11-09 13:54 232 查看
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}
.

Solution: make sure the last element points to NULL in the new list;

void reorderList(ListNode *head) {
vector<ListNode * > nodes;
ListNode * current = head;
while(current != NULL) {
nodes.push_back(current);
current = current->next;
}
for(int i = 0; i < nodes.size() / 2; i ++){
int next = nodes.size() - 1 - i;
if(i < next){
ListNode * tmp = nodes[i]->next;
nodes[i]->next = nodes[next];
nodes[next]->next = tmp;
}
}
if(nodes.size() > 0)
nodes[nodes.size() / 2]->next = NULL;
}


void reorderList(ListNode *head) {
vector<ListNode * > nodes;
ListNode * current = head;
while(current != NULL) {
nodes.push_back(current);
current = current->next;
}
for(int i = 0; i < nodes.size() / 2; i ++){
if(i < nodes.size() - 1 - i){
nodes[i]->next = nodes[nodes.size() - 1 - i];
if(i + 1 < nodes.size() - 1 - i)
nodes[nodes.size() - 1 - i]->next = nodes[i + 1];
else
nodes[nodes.size() - 1 - i]->next = NULL;
}
}
if(nodes.size() % 2 == 1)
nodes[nodes.size() / 2]->next = NULL;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: