12_203. 移除链表元素
题目描述:
解题思路:
- "哨兵节点",创建一个虚拟的头结点,迭代的遍历并移除元素即可。
- “递归”,链表问题的解决,大部分都可以用递归来解决。如果头结点为Null,返回null;如果头结点不为null,则
head.next = removeElements(head.next,val)
,此时当head为val时,返回head.next,反之返回head。
哨兵节点
/**
********哨兵节点
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode preHead = new ListNode(0);
preHead.next = head;
ListNode temp = preHead;
while (temp.next != null) {
if (temp.next.val == val) {
temp.next = temp.next.next;
} else {
temp = temp.next;
}
}
return preHead.next;
}
}
递归
//递归
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
if (head == null){
return head;
}
head.next = removeElements(head.next,val);
return head.val == val ? head.next : head;
}
}