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 436. Find Right Interval 题解(C++)
- leetcode 436. Find Right Interval 最右边的区间+很棒的用Map统计遍历
- [Leetcode] 436. Find Right Interval 解题报告
- 436. Find Right Interval (寻找最近的右区间)
- [LeetCoee] 436. Find Right Interval 解题报告
- Leetcode: Find Right Interval
- Leetcode Find Right Interval
- LeetCode - 436 - Find Right Interval
- 436. Find Right Interval
- 436. Find Right Interval
- [算法分析与设计] leetcode 每周一题: Find Right Interval
- Binary Search:436. Find Right Interval
- [LeetCode]Find Right Interval(Java)
- 436. Find Right Interval ——本质:查找题目,因此二分!
- LeetCode 389. Find the Difference 题解(C++)
- LeetCode题解:Range Sum Query - Immutable(C++版本)
- leetcode--Find Minimum in Rotated Sorted Array II ---C++
- [leetcode-117]Populating Next Right Pointers in Each Node II(c++)
- LeetCode题解:Populating Next Right Pointers in Each Node
- 【leetcode】Binary Tree Right Side View --C++