当前位置:   article > 正文

LeetCode:19、给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。_给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点

给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点
一、题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。题目链接
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
  • 1
  • 2
  • 3
二、分析:

整体思路是让前面的指针先移动n步,之后前后指针共同移动直到前面的指针到尾部为止
可以使用两个指针,s (start) 、e(end)
因为第一个元素head可能是需要被删除的元素
所以,需要创建创建一个结点pre,pre的下一个节点为head
首先,先让 s 指针向后走n步,如果n.next != null,
就让s、e分别指向下一个元素
这个时候发现,e指向的元素就是该删除元素的前一个元素,
使用e.next = e.next.next可以删除需要删除的元素
最后返回pre.next
图片解释

(1)
s向后走n步后的位置图
在这里插入图片描述
s、e最后的样子:
在这里插入图片描述

三、代码:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode pre = new ListNode(0);
        pre.next = head;
        ListNode s = pre;
        ListNode e = pre;
        while(n != 0) {
            s = s.next;
            n--;
        }
        while (s.next != null) {
            s = s.next;
            e = e.next;
        }
        e.next = e.next.next;
        return pre.next;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/zyabc/article/detail/60465
推荐阅读
相关标签
  

闽ICP备14008679号