[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;
    }
};


全部评论

相关推荐

07-31 14:10
门头沟学院 Java
点赞 评论 收藏
分享
07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
星辰再现:裁员给校招生腾地方
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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