题目 : 删除链表中等于给定值val的所有结点
示例 :
输入 : 1 -> 2 -> 6 -> 3 -> 4 ->5 -> 6 val = 6
输出 : 1 -> 2 -> 3 -> 4 -> 5
先来分析一下这道题, 简单理一下思路
我们可以依次遍历链表中的每一个结点, 如果结点的值不是val, 就把结点尾插到结果链表中
方法一 :
public ListNode removeElements(ListNode head, int val) {
ListNode result = null;
ListNode last = null;
ListNode cur = head;
while (cur != null) {
ListNode next = cur.next;
if (cur.val != val) {
//如果当前值不是val, 就把当前值尾插到result链表上
//尾插
cur.next = null;
if (result == null) {
result = cur;
} else {
last.next = cur;
}//尾插结束
last = cur;//更新结果链表的最后一个结点
}
cur = next;
}
return result;
}
方法二 :
public ListNode removeElements2(ListNode head, int val) {
if (head == null) {
return null;
}
ListNode cur = head;
while (cur.next != null) {
if (cur.next.val != val) {
cur = cur.next;
} else {
cur.next = cur.next.next;
}
}
if(head.val == val){
return head.next;
}else{
return head;
}
}
方法三 :
public ListNode removeElements3 (ListNode head,int val){
//使用递归实现
if (head == null) {
return null;
}
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
}