您的位置:首页 > 编程语言 > C语言/C++

LeetCode 436. Find Right Interval 题解(C++)

2016-11-07 19:54 337 查看

LeetCode 436. Find Right Interval 题解(C++)

题目描述

Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.

You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity.

举例

Given 1->2->3->4->5->NULL,

return 1->3->5->2->4->NULL.

补充

The relative order inside both the even and odd groups should remain as it was in the input.

The first node is considered odd, the second node even and so on …

思路



- 具体看上面的图解,OJ上给出的代码是通过两个分别指向奇数结点和偶数结点的指针odd,even来完成的,将奇数结点接在odd链表上,偶数结点接在even链表上,最后再将even链表接在odd链表后面;

- 我的思路跟上面的差不多,差别在于不是在最后才将偶数链表接在奇数链表后面,而是每次都将奇数结点和偶数链表交换位置,详情见代码。

代码

我的代码

class Solution
{
public:
ListNode* oddEvenList(ListNode* head)
{
if (head == NULL || head->next == NULL)
{
return head;
}
ListNode *preNode = head;
ListNode *curNode = preNode;
ListNode *nextNode = curNode->next;
while (nextNode != NULL)
{
curNode = nextNode;
nextNode = nextNode->next;
if (nextNode == NULL)
{
break;
}
ListNode *temp = nextNode->next;
nextNode->next = preNode->next;
preNode->next = nextNode;
curNode->next = temp;
preNode = preNode->next;
nextNode = curNode->next;
}
return head;
}
};


leetcode给出的代码

class Solution
{
public:
ListNode* oddEvenList(ListNode* head)
{
if (head == NULL)
{
return head;
}
ListNode *odd = head;
ListNode *evenHead = head->next;
ListNode *even = evenHead;
while (even != NULL && even->next != NULL)
{
odd->next = even->next;
odd = odd->next;
even->next = odd->next;
even = even->next;
}
odd->next = evenHead;

return head;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode c++