思路:建立一个新的空链表,将不是要移除的结点尾插到新链表中
public Node removeElements(Node head, int val) {
Node result = null;
Node last = null; // 记录目前 result 中的最后一个结点
Node cur = head;
while (cur != null) {
if (cur.val == val) { //若遇到要移除的就跳过,继续判断下一个结点
cur = cur.next;
continue;
}
Node next = cur.next;
if (result == null) {
result = cur;
} else { //若result中不为空,则进行尾插
last.next = cur;
}
cur.next = null;//让新链表中的最后一个结点为空,形成一个完整的链表
last = cur;
cur = next;
}
return result;
}
要注意的事项:若不懂两个语句连起来的,可将其拆分,定义一个next一步步的来。