题解 | #旋转链表#

旋转链表

https://www.nowcoder.com/practice/1ad00d19a5fa4b8dae65610af8bdb0ed

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* rotateLinkedList(ListNode* head, int k) {
        // write code here
        if (!head || !head->next || k == 0) return head;

        // 计算链表长度
        int len = 1;
        ListNode* tail = head;
        while (tail->next) {
            tail = tail->next;
            len++;
        }

        cout << len << endl;
        // 首尾相连成环
        tail->next = head;

        // 计算移动距离
        k = k % len;
        if (k == 0) {
            tail->next = nullptr; // 还从原来的位置断开
            return head;
        }

        // 找到新的尾部,移动 (len - k) 步
        int stepsToNewTail = len - k;
        ListNode* newTail = head;
        for (int i = 0; i < stepsToNewTail - 1; ++i) {
            newTail = newTail->next;
        }

        // 从新的尾部后面这里断开
        ListNode* newHead = newTail->next;
        newTail->next = nullptr;

        return newHead;
    }
};

全部评论

相关推荐

03-31 17:40
已编辑
门头沟学院 算法工程师
程序员牛肉:小牛肉来也! 也不要焦虑啦,你第一志愿还没有结束,只是回到人才库(泡大池子等待各个部门挑选)而已。仅仅代表你不符合这个组的用人标准,并不能够说明你在本次暑期实习中没机会加入美团了。 还是平复好心态,不断的复盘,等待下一次面试就好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务