LeetCode——旋转链表

给定一个链表,旋转链表,将链表每个节点向右移动 个位置,其中 是非负数。

示例 1:

示例 2:

关键是找到旋转后哪个点成为头节点(将其返回),哪个点成为尾节点,将其next指针设为NULL

示例2相当于给了一点提示:当循环移动位数等于链表长度的整数倍时,链表不变。

#include<cstdlib>
class Solution {
public:
    ListNode *rotateRight(ListNode *head, int k) {
        if(k == 0 || head == NULL || head->next == NULL)
            return head;
        ListNode *temp = head, *first = NULL, *pre = NULL;
        int size = 0, count = 0, newk;
        while(temp != NULL)
        {
            pre = temp;
            size++;
            temp = temp->next;
        }
        pre->next = head;
        newk = k % size;
        temp = head;
        count = 1;
        while(count < size-newk)
        {
            count++;
            temp = temp->next;
        }   
        first = temp->next;
        temp->next = NULL;
        return first;
        
    }
};

啊,这么慢.................  但是代码不变再提交一次,提升这么多,这个时间还有参考价值吗.........??

还有就是,算出来newk之后可以再判断一次 == 0? 若是直接返回head。

扫描二维码关注公众号,回复: 2178324 查看本文章

但是提交代码时显示 超时,不懂........

猜你喜欢

转载自blog.csdn.net/eartha1995/article/details/81003044
今日推荐