C/C++教程

【链表】【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 }

 

这篇关于【链表】【leetCode高频】: 19. 删除链表的倒数第 N 个结点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!