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

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

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

C语言, 快慢指针找到倒数n+1节点,然后设置next指针指向next->next,跳过n节点

struct ListNode* removeNthFromEnd(struct ListNode* head, int n ) {

    // write code here

    struct ListNode *pfast, *pslow;

    struct ListNode *dummyHead = (struct ListNode *)malloc(sizeof(struct ListNode));

    dummyHead->next = head;

    pfast = dummyHead, pslow = dummyHead;   //创建虚拟头节点,并且fast slow都指向dummy

    for(int i=0; i<=n; i++){    //找到fast位置,注意此时slow和fast距离n+1

        if(!pfast)return NULL;

        pfast = pfast->next;

    }

    while(pfast){               //当fast没到末尾时,fast slow一起移动

        pfast = pfast->next;

        pslow = pslow->next;

    }

    //fast找到末尾时,slow在要删除的节点的前一个(前面的n+1),将slow的next指向next->next,跳过倒数n节点。

    pslow->next = pslow->next->next;    

    return dummyHead->next;

}

全部评论

相关推荐

xwqlikepsl:感觉很厉害啊,慢慢找
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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