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
.
题意描述很模糊,经过多次失败的尝试,总算明白大概是啥意思了……
/** * 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)return NULL; k = k%listlength(head); if(k == 0||k>=listlength(head))return head; ListNode *s1 = head,*s2 = head,*temp = head; for(int i = 0 ; i < k-1;i++) { if(s1->next == NULL)return head; s1 = s1 -> next; } while(s1 -> next != NULL) { s1 = s1 -> next; temp = s2; s2 = s2 -> next; } s1->next =head; head = s2; temp->next = NULL; return head; } int listlength(ListNode *head) { int i = 0; ListNode *temp = head; while(temp !=NULL) { i++; temp = temp ->next; } return i; } };