0
点赞
收藏
分享

微信扫一扫

删除链表倒数第n个结点 双指针

玉新行者 2022-04-29 阅读 116
c语言

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

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1

img

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2

输入:head = [1], n = 1
输出:[]

示例3

输入:head = [1,2], n = 1
输出:[1]
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    struct ListNode *fast = head ,*slow = head ;
    int i = 0;
    for( ; i < n; i++)
        fast = fast->next;		// 快指针移动n步	
    while(fast && fast ->next)	// 判断快指针 和 快指针的 next 是否为空
    {
        fast = fast->next;		
        slow = slow->next;
    }
    if(fast == NULL)		// 如果快指针为空 则删除的是头结点
        head = head->next;
    else					// 慢指针为该节点的前继结点  指向下下个结点
        slow->next = slow->next->next;
    return head;    
}
}
举报

相关推荐

0 条评论