leetcode:Rotate List
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode:Rotate List相关的知识,希望对你有一定的参考价值。
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.
分析:题意为将一个链表向右旋转k位。
思路:此题同样可以利用双指针,第一个指针从头开始向后移动k位,然后第二个指针指向头指针,接着两个指针一起向后移动直到第一个指针指向尾节点。
建立第三个辅助指针指向第二个指针的后继结点作为将要返回的新头指针,再把第二个指针的后继设为空指针,同时将第一个指针的后继指向原先的头指针,这样就能完成旋转啦!
代码:
/** * 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 || k <= 0) return head; ListNode *temp = head; int count = 0; while(temp != NULL) { count++; temp = temp->next; } if(k > count) k = k%count; if(k == count || k == 0) return head; ListNode *first = head; while(k > 0) { first = first->next; k--; } ListNode *second = head; while(first->next != NULL) { first = first->next; second = second->next; } ListNode *newhead = second->next; first->next = head; second->next = NULL; return newhead; } };
以上是关于leetcode:Rotate List的主要内容,如果未能解决你的问题,请参考以下文章