[TOP202]题解 | #调整牛群顺序#

调整牛群顺序

https://www.nowcoder.com/practice/a1f432134c31416b8b2957e66961b7d4

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
  public:
    ListNode* moveNthToEnd(ListNode* head, int n) {
        if (head == nullptr || n <= 0) {
            return head;
        }

        ListNode* dummy = new ListNode(0);  // 添加一个哑节点简化操作
        dummy->next = head;
        ListNode* slow = dummy;
        ListNode* fast = dummy;

        // 第一个指针先移动 n 步
        for (int i = 0; i <= n; ++i) {
            if (fast == nullptr) {
                return head; // 链表长度小于 n,直接返回原链表
            }
            fast = fast->next;
        }

        // 同时移动两个指针,直到第一个指针到达链表末尾
        while (fast != nullptr) {
            slow = slow->next;
            fast = fast->next;
        }

        // 此时第二个指针指向倒数第 n 个节点,将其从链表中删除
        ListNode* nthNode = slow->next;
        slow->next = nthNode->next;

        // 将倒数第 n 个节点插入到链表末尾
        ListNode* current = dummy;
        while (current->next != nullptr) {
            current = current->next;
        }
        current->next = nthNode;
        nthNode->next = nullptr;

        ListNode* newHead = dummy->next;
        delete dummy; // 释放哑节点内存

        return newHead;
    }
};


全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务