Leetcode Rotate List
2017-06-23 09:43
246 查看
Given a list, rotate the list to the right by
k places, where k is non-negative.
For example:
Given
return
创建一个哨兵节点phead,pthread->next=head,第一次遍历求出链表的长度len以及链表的最后节点tail,k=k%len,通过第二次遍历找到前半段的最后一个节点curr。如果curr==tail,那么说明k%len为0,只需返回head;否则phead->next = tail,tail->next=curr->next;curr->next = NULL(不加的还结果为循环列表,导致leetcode判定会超时);返回pthread->next.
代码如下:
k places, where k is non-negative.
For example:
Given
1->2->3->4->5->NULLand k =
2,
return
4->5->1->2->3->NULL.
创建一个哨兵节点phead,pthread->next=head,第一次遍历求出链表的长度len以及链表的最后节点tail,k=k%len,通过第二次遍历找到前半段的最后一个节点curr。如果curr==tail,那么说明k%len为0,只需返回head;否则phead->next = tail,tail->next=curr->next;curr->next = NULL(不加的还结果为循环列表,导致leetcode判定会超时);返回pthread->next.
代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* rotateRight(ListNode* head, int k) { if(head == NULL || head->next == NULL || k == 0) return head; ListNode* phead = new ListNode(0); ListNode* curr= head,*tail = head; int len =0; while(tail->next != NULL) { tail = tail->next; len++; } len++; k = k%len; if(k == 0 ) return head; int count = 0; while( count < len-k-1) { curr = curr->next; count++; } phead->next = curr->next; curr->next = NULL; tail->next = head; return phead->next; } };
相关文章推荐
- [LeetCode] Rotate List
- leetCode 61.Rotate List (旋转链表) 解题思路和方法
- [LeetCode] Rotate List
- LeetCode刷题笔记(链表):rotate-list
- [leetcode]61. Rotate List@Java解题报告
- LeetCode 61. Rotate List
- LeetCode Rotate List
- leetcode[61]:Rotate List
- 【leetcode】Rotate List
- leetCode 61.Rotate List (旋转链表) 解题思路和方法
- Rotate List leetcode
- leetcode 之Rotate List(18)
- leetcode 61. Rotate List 向右旋转k个元素 + 链表环遍历
- [Leetcode]61. Rotate List
- Leetcode: Rotate List
- 【LeetCode】C# 61、Rotate List
- [LeetCode] Rotate List
- leetcode:Rotate List
- 61. Rotate List【M】【54】【leetcode】
- leetcode 61. Rotate List