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.
首先先让faster从起始点往后跑n步。
然后再让slower和faster一起跑,直到faster==null时候,slower所指向的node就是需要删除的节点。
注意:慢指针要在dummy上而不是head上 因为可能head位的数值被删除return也要return dummy.next 因为head可能被删除
时间O(n) 空间O(1)
public class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if (n <= 0){ return null; } ListNode dummy = new ListNode(0); dummy.next = head; ListNode faster = head; ListNode slower = dummy; for (int i = 0; i < n; i++){ if (faster == null){ return null; } faster = faster.next; } while (faster!= null){ faster = faster.next; slower = slower.next; } slower.next = slower.next.next; return dummy.next; } }
没有评论:
发表评论