其他分享
首页 > 其他分享> > 【链表】【leetCode高频】: 19. 删除链表的倒数第 N 个结点

【链表】【leetCode高频】: 19. 删除链表的倒数第 N 个结点

作者:互联网

1、题目描述

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

 

 

 

2、算法分析

知识补充:

 

 

 分析:

题目要求是删除链表中倒数第N个结点。可以使用两个指针slow,fast。

重点是找到被删除结点的前一个结点。

①定义一个头结点指向head

②slow指向头结点,fast指向的是head结点。fast先走n位,然后slow,fast指针结点一起往后走n位,当fast指向空的时候,slow指向的是待删除结点的前一位。

③定义ListNode slow = dummy。这样就错开了一位。当fast指针指向链表的最后一位的时候,slow正好是指向的被删除结点的前一位。

3、代码实现

 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 }

 

标签:结点,slow,ListNode,val,19,fast,链表,倒数第
来源: https://www.cnblogs.com/codingLJ/p/16214645.html