leetcode刷题——删除链表的倒数第N个结点(Java)

leetcode刷题——删除链表的倒数第N个结点(Java),第1张

leetcode刷题——删除链表的倒数第N个结点(Java) 1.题目

2.条件与思路 3.解题过程

第一次提交

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head.next==null) return null;//只有一个节点的链表的特殊处理
        //关键是遍历到待删节点的前驱节点
        ListNode p = new ListNode();
        ListNode q = new ListNode();
        p=head;q=head;
        if(n<1) return null;

        //先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点
        int i = 0;
        while(i 


分析:没有考虑到删除第一个节点的特殊处理情况。

第二次提交

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head.next==null) return null;//只有一个节点的链表的特殊处理
        //关键是遍历到待删节点的前驱节点
        ListNode p = new ListNode();
        ListNode q = new ListNode();
        p=head;q=head;

        //先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点
        int i = 0;
        while(i 

4.官方题解

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0, head);
        ListNode first = head;
        ListNode second = dummy;
        for (int i = 0; i < n; ++i) {
            first = first.next;
        }
        while (first != null) {
            first = first.next;
            second = second.next;
        }
        second.next = second.next.next;
        ListNode ans = dummy.next;
        return ans;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5715945.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存