Cover image for 面试经典150题 P19 删除链表的倒数第 N 个结点

面试经典150题 P19 删除链表的倒数第 N 个结点


时间轴

时间轴

2025-11-20

init

链表

题目:

快慢指针,注意特殊情况,即要删除的是头节点

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
struct ListNode {	int val;	ListNode *next;	ListNode()		: val(0)		, next(nullptr)	{	}	ListNode(int x)		: val(x)		, next(nullptr)	{	}	ListNode(int x, ListNode *next)		: val(x)		, next(next)	{	}};class Solution {    public:	ListNode *removeNthFromEnd(ListNode *head, int n)	{		//双指针,当l从head开始,r=从head+n开始		ListNode *l = head;		ListNode *r = head;		ListNode *p;		for (int i = 0; i < n; i++) {			r = r->next;		}		if (r == nullptr) { // n == sz			p = head;			head = head->next;			delete p;			return head;		}		while (r->next != nullptr) {			r = r->next;			l = l->next;		}		p = l->next;		l->next = p->next;		delete p;		return head;	}};

leetcode hot 100 rewrite

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
struct ListNode {        int val;        ListNode *next;        ListNode()                : val(0)                , next(nullptr)        {        }        ListNode(int x)                : val(x)                , next(nullptr)        {        }        ListNode(int x, ListNode *next)                : val(x)                , next(next)        {        }};class Solution {    public:        ListNode *removeNthFromEnd(ListNode *head, int n)        {                ListNode *virtual_head = new ListNode(0, head);                ListNode *p = virtual_head, *q;                int i, nr_node = 0, tpos;                while (p->next != nullptr) {                        p = p->next;                        nr_node++;                }                tpos = nr_node - n;                p = virtual_head;                for (i = 0; i < tpos; i++) {                        p = p->next;                }                // p->next is target                q = p->next;                p->next = q == nullptr ? nullptr : q->next;                head = virtual_head->next;                delete virtual_head;                return head;        }};
评论加载中…