力扣:19.删除链表的倒数第N个节点(难度中等)
题目描述:
给你一个链表,删除链表的倒数第 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;
}
}