liuxuhelloworld's notebook

题目链接

https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

解答过程

这个题目是挺久以前写的了。先遍历计数,后遍历到待删除节点的前一节点后进行删除,我觉得这样就可以了。官方题解的栈解法和双指针解法,有一定启发性,但对这个题目而言,感觉完全没必要,纯属简单问题复杂化。

	public ListNode removeNthFromEnd(ListNode head, int n) {
		if (head == null || n <= 0) {
			return head;
		}

		int size = size(head);
		if (size == n) {
			head = head.next;
		} else if (size > n) {
			ListNode p = head;
			int i = 1;
			while (i++ < size-n) {
				p = p.next;
			}
			p.next = p.next.next;
		}

		return head;
	}

	private int size(ListNode node) {
		int size = 0;
		while (node != null) {
			size++;
			node = node.next;
		}

		return size;
	}