力扣:19.删除链表的倒数第N个节点(难度中等)

72 阅读1分钟

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

进阶:你能尝试使用一趟扫描实现吗?

示例 1:

输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2:

输入:head = [1], n = 1 输出:[] 示例 3:

输入:head = [1,2], n = 1 输出:[1]  

提示:

链表中结点的数目为 sz

1 <= sz <= 30

0 <= Node.val <= 100

1 <= n <= sz

来源:力扣(LeetCode)

解题思路:先循环记录链表的长度length,然后根据length和n的关系找到要删除的节点并删除节点。上代码(0ms,Java中超过100%)

    public ListNode removeNthFromEnd(ListNode head, int n) {
        int length = 0;
	ListNode getLengthNode = head;
	while (getLengthNode != null) {
		++length;
		getLengthNode = getLengthNode.next;
	}
	if (n == length) {
		head = head.next;
		return head;
	}
	ListNode findDeleteNode = head;
	while (findDeleteNode != null) {
		--length;
		if (length == n) {
			findDeleteNode.next = findDeleteNode.next.next;
			break;
		}
		findDeleteNode = findDeleteNode.next;
	}
	return head;
    }
}