题解 | #删除链表的倒数第n个节点#

删除链表的倒数第n个节点

http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

使用快慢指针来解决,快指针比慢指针快n步,这样当快指针到链表尾时快指针刚才指向的是倒数的n个节点。

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        // write code here
        ListNode* slow = head;
        ListNode* fast = head;
        //快指针先走n步;
        while(n--)
        {
            fast = fast->next;
        }

        if(fast == NULL)
        {
            ListNode *tmp = head->next;
            free(head);
            head = NULL;
            return tmp;
        }else
        {
            //快指针走到尾时,慢指针刚好是倒数第n个节点;
            while(fast->next)
            {
                slow = slow->next;
                fast = fast->next;
            }

            ListNode* tmp = slow->next;
            slow->next = slow->next->next;

            tmp->next = NULL;
            free(tmp);
            tmp = NULL;
            return head;
        }
    }
};
全部评论

相关推荐

头像
2025-12-27 13:01
三峡大学 C++
点赞 评论 收藏
分享
脑袋锈住了:你这算啥,哥们中科院中强所硕士,本科211,叫我去干分拣,时薪20
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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