给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
知识补充:
。
分析:
题目要求是删除链表中倒数第N个结点。可以使用两个指针slow,fast。
重点是找到被删除结点的前一个结点。
①定义一个头结点指向head
②slow指向头结点,fast指向的是head结点。fast先走n位,然后slow,fast指针结点一起往后走n位,当fast指向空的时候,slow指向的是待删除结点的前一位。
③定义ListNode slow = dummy。这样就错开了一位。当fast指针指向链表的最后一位的时候,slow正好是指向的被删除结点的前一位。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode() {} 7 * ListNode(int val) { this.val = val; } 8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; } 9 * } 10 */ 11 class Solution { 12 public ListNode removeNthFromEnd(ListNode head, int n) { 13 ListNode dummy = new ListNode(0,head); 14 ListNode slow = dummy; 15 ListNode fast = head; 16 17 for(int i = 1;i <= n;i++){ 18 fast = fast.next; 19 } 20 21 while(fast != null){ 22 slow = slow.next; 23 fast = fast.next; 24 } 25 slow.next = slow.next.next; 26 return dummy.next; 27 } 28 }