代码部分:
public ListNode removeElements(ListNode head, int val) {
ListNode newHead = null;
ListNode endNode = null;
while (head != null){
if (head.val != val){
if (newHead == null){
newHead = new ListNode(head.val);
endNode = newHead;
}else {
endNode.next = new ListNode(head.val);
endNode = endNode.next;
}
}
head = head.next;
}
return newHead;
}
本体思路:因为题目要求是要返回一个新的头结点,我就创建了一个新的链表。
先排除极端情况,当旧的链表没有节点时,直接返回null。
当不是极端情况时,先建立一个新的头结点和尾节点,然后遍历旧的链表,当head.val == val的时候,跳到下一个节点,当head.val != val,先判断一下是否为第一次赋值,如果是,那就让新的头结点创建对象并赋val值,然后让尾节点也指向头结点;若不是,那就让尾节点向后移,endNode.next = new ListNode(head.val);endNode = endNode.next,这样一直遍历到结束,最后返回新链表的头结点newHead。