leecode:203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 思路: 有两种方法:不添加虚拟的头结点 和 添加虚拟头结点 1)对于不添加虚拟头结点,考虑三种情况: a. 链表为null b.head.val==val c.正常情况
class Solution {
public ListNode removeElements(ListNode head, int val) {
while(head!=null&&head.val==val){
head = head.next;
}
if(head==null){
return null;
}
ListNode pre = head;
ListNode cur = head.next;
while(cur!=null){
if(cur.val==val){
pre.next = cur.next;
}else{
pre = cur;
}
cur = cur.next;
}
return head;
}
}
2)创建一个虚拟的头结点 此时无需考虑第一个结点的值是否等于val了 仅考虑两种情况: a.链表是否为null b.正常遍历删除
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null){
return null;
}
ListNode newHead = new ListNode(-1, head);
ListNode pre = newHead;
ListNode cur = newHead.next;
while(cur!=null){
if(cur.val==val){
pre.next = cur.next;
}else{
pre = cur;
}
cur = cur.next;
}
return newHead.next;
}
}
|