本文共 836 字,大约阅读时间需要 2 分钟。
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 大于链表总长度的时候,就循环计数,例如 链表为 1-> 2,k = 3,就相当于k = 1 的情况。
class Solution {public: ListNode *rotateRight(ListNode *head, int k) { if(head == NULL || head->next == NULL || !k) return head; ListNode *rhead,*rtail; int len = 1; rhead = head; while(rhead->next) { ++len; rhead = rhead->next;} rhead->next = head; /*take care: k > len is ok!!!*/ //if(k >= len) return head; k=k%len; int stps = 1; rtail = head; while(stps < len - k) { stps++; rtail = rtail->next; } head = rtail->next; rtail->next = NULL; return head; }};这里将链表尾指向头结点,构成环。就不用额外处理了,在第一次遍历中就处理好了。
转载地址:http://xelji.baihongyu.com/