本文最后更新于:2022年8月29日 晚上
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
示例 1:
| 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
|
示例 2:
示例 3:
提示:
- 链表中结点的数目为
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if(!head) return head; ListNode* dummyHead = new ListNode(0, head); ListNode* slow=dummyHead, *fast=dummyHead; while (n-- && fast != nullptr) { fast = fast->next; }
while(fast->next){ slow = slow->next; fast = fast->next; } slow->next = slow->next->next; return dummyHead->next; } };
|
java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if (head == null) { return head; } ListNode dummyHead = new ListNode(-1, head); ListNode slow = dummyHead; ListNode fast = dummyHead; for (int i = 0; i < n; ++i) { if (fast == null) { return null; } fast = fast.next; } while (fast.next != null) { slow = slow.next; fast = fast.next; } slow.next = slow.next.next; return dummyHead.next; } }
|