题目:
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
思路:我自己想的是判断当前节点temp的下一个节点temp.next是否等于val,如果相等就将temp.next.next赋给temp.next。若链表的第一个节点和最后一个节点等于val的进行处理。但是写出的代码是错的。。。。而且恒复杂需要考虑几个特殊情况。于是借鉴了网上大神的代码:
代码:
在链表头添加一个节点,这样可以不用特殊处理链表头和链表结尾的特殊节点,便于链表遍历和删除
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode root = new ListNode(1);
root.next = head;
// 调于记录要处理的元素的前驱结点
ListNode prev = root;
// prev.next表示要处理的结点
while (prev.next != null) {
// 要处理的结点是要删除的结点
if (prev.next.val == val) {
// 对结点进行删除操作
prev.next = prev.next.next;
}
// 当前处理的节点不需要删除,prev移动到下一个结点
else {
prev = prev.next;
}
}
// 返回新的根结点
return root.next;
}
}