旋转链表
题目链接:旋转链表
/**
* 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;
}
int len = 0;
ListNode* p = head;
//首先计算出来整个链表的长度
while(p){
len++;
p = p->next;
}
k = k%len;
k = len - k;
//取模运算,调整数据
//边界情况判断
if(k == 0 || k == len){
return head;
}
int i;
//找到应当断开的地方
for(i = 0,p = head;p!=NULL&&i<k-1;i++,p=p->next);
//cout << " p = " << p->val << endl;
ListNode* q = p->next; //记录新的首元结点
p->next = NULL; //断开操作
p = q;
while(p->next){
p = p->next;
}
p->next = head;
head = q;
return q;
}
};

浙公网安备 33010602011771号