Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
题目解析:
依旧还是快慢指针, 思想是: 两个node, fast先走n步, 然后两个node一起走, 当fast走到list结尾的时候, lower刚好在要删除的node的前面. 之后就是lower.next = lower.next.next;就行啦~
注意几种情况要判断, 不然会time error:
- n = 0 || head == null
- n == 1 && head.next == null
- 删除head节点的时候
上代码:
1 public ListNode removeNthFromEnd(ListNode head, int n) { 2 if(head == null || n = 0) //head is null condition 3 return head; 4 if(n == 1 && head.next == null) //just having a head condition 5 return null; 6 ListNode fast = head; 7 ListNode lower = head; 8 for(int i = 0; i < n; i++) 9 fast = fast.next; 10 if(fast == null){ //removing of the head 11 head = head.next; 12 return head; 13 } 14 while(fast.next != null){ 15 fast = fast.next; 16 lower = lower.next; 17 } 18 lower.next = lower.next.next; 19 return head; 20 }
时间: 2024-12-25 20:35:12