Re: [闲聊] 每日leetcode

楼主: NCKUEECS (小惠我婆)   2024-03-04 00:05:58
白痴赛区让我一盘小康->赤贫
来刷点P币
※ 引述《oin1104 (是oin的说)》之铭言:
: 突然发现有点久没纪录= =
: 今天每日是
: 19. remove Nth Node from end of list
: 叫你删除从后面数的第N个节点
: 解法:
先算总长度就蛮简单的
但follow up要求用one pass
其实我也不确定怎样叫one pass
要删倒数第n个
就要找到倒数第n+1个
用2个pointer a b
b先走n步后
ab再同时一步一步动
当b走到最后一个节点的时候
a就是倒数第n+1个了
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode *new_head = malloc(sizeof(struct ListNode)*1);
struct ListNode *slow = new_head, *fast = new_head;
int i;
new_head->next = head;
for(i=0; i<n; i++)
fast = fast->next;
while(fast->next){
fast = fast->next;
slow = slow->next;
}
slow->next = slow->next->next;
return new_head->next;
}
之前写过
结果今天看了10分钟完全想不到...
真不知道我当初怎么想到的
作者: oin1104 (是oin的说)   2024-03-04 00:08:00
这做法 很酷

Links booklink

Contact Us: admin [ a t ] ucptt.com