天天看点

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

public class DeleteNthDesc {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0, head); //定义虚拟头头节点
        int length = getLength(head); //获取head链表的大小
        ListNode cur = dummy;
        //获取被删除节点的上一个节点【因为是删除倒数的节点,又因为是链表,所以我们必须从正面来】
        for (int i = 1; i < length - n + 1; ++i) {
            cur = cur.next;
        }
        cur.next = cur.next.next; //删除节点
        ListNode ans = dummy.next; //返回删除后的头结点链表
        return ans;
    }
    //获取链表大小
    public int getLength(ListNode head) {
        int length = 0;
        while (head != null) {
            ++length;
            head = head.next;
        }
        return length;
    }
}


class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}      

继续阅读