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

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

思路:双指针 fisrt指针先走n步,再同时和sec指针走,当first的next为null时,sec的next即为要删除的节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode* first=head;
    while(n--)
    {
        first=first->next;
    }
    if(!first)
        return head->next;
    struct ListNode*sec=head;
    while(first->next!=NULL)
    {
        first=first->next;
        sec=sec->next;
    }
    sec->next=sec->next->next;
    return head;
    
}

猜你喜欢

转载自blog.csdn.net/weixin_42173193/article/details/82812464