hot100_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]
思路
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int len = head.size();
num = len - n;
LinkedList<Integer> list = new LinkedList<>();
LinkedList<Integer> p = new LinkedList<>();
list = head;
p = head;
for(int i=1;i<num;i++){
p = p.next;
}
p.next = null;
return list;
}
}
问题分析
ListNode 和 LinkedList 的混淆:
ListNode 是一个自定义的链表节点类,通常用于表示单链表的节点。它通常包含 val(节点值)和 next(指向下一个节点的指针)。
LinkedList 是 Java 标准库中的一个类,属于 java.util 包,是一个双向链表实现,支持多种操作。
你的代码中错误地将 ListNode 和 LinkedList 混用,导致类型不匹配的错误。
size() 方法的错误调用:
ListNode 类没有 size() 方法,这是 LinkedList 类的方法。因此,head.size() 会报错。
未定义变量 num:
代码中使用了变量 num,但没有提前声明或初始化。
逻辑错误:
代码的逻辑试图通过 LinkedList 的方式操作 ListNode,但 ListNode 没有 next 属性(在错误的上下文中)。
返回值类型不匹配:
方法的返回值类型是 ListNode,但你试图返回一个 LinkedList 类型的对象。
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int length = getLength(head);
ListNode dummy = new ListNode(0, 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;
}
}