hello congshen

自我成长

[leetcode] 【链表】 61. 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个节点翻转到链表头,比如1->2->3->4->5->NULL and k = 2,
4->5反转到了开头得到4->5->1->2->3->NULL.

题解

先遍历一遍算出长度len,然后k的值有可能大于len,所以k=k%len;
然后把链表头尾相连,走len-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 *p=head;
        int len=0;
        while(p!=NULL)
        {
            len++;
            if(p->next==NULL)
                break;
            else p=p->next;
        }
        k=k%len;
        p->next=head;
        for(int i=0;i<len-k;i++)
            p=p->next;
        head=p->next;
        p->next=NULL;
        return head;
        
    }
};



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014654002/article/details/51556790
文章标签: leetcode cpp
个人分类: leetcode链表 c-c++
上一篇[leetcode] 【链表】 82. Remove Duplicates from Sorted List II
下一篇[leetcode] 【链表】19. Remove Nth Node From End of List
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭