链表-删除链表的倒数第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): fast = fast.next n -= 1 fast = fast.next while(fast): fast = fast.next slow = slow.next slow.next = slow.next.next return fakehead.next
|