0%

代码随想录第十天

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

题目链接

fast先移动n+1个节点,与slow之间要相隔n个节点,然后fast需要和slow一起移动,直到fast指向末尾(C++/C记得释放被删除的节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
typedef struct ListNode ListNode;
ListNode* dummyNode = (ListNode*)malloc(sizeof(ListNode));
dummyNode->next = head;
ListNode* fast = dummyNode;
ListNode* slow = dummyNode;
ListNode* tmp;
while(fast && n--){
fast = fast->next;
}
fast = fast->next;
while(fast){
fast = fast->next;
slow = slow->next;
}
tmp = slow->next;
slow->next = slow->next->next;
free(tmp);
return dummyNode->next;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
fakehead = ListNode(next = head)
slow, fast = fakehead, fakehead
while (n): # python没有--或者++
fast = fast.next
n -= 1
fast = fast.next
while(fast):
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return fakehead.next