解题思路
203. 移除链表元素
该题有三种思路:
- 新创建一个链表,指向不相同的元素
- 给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 static ListNode removeElements(ListNode head, int val) {
if(head == null) return head;
ListNode node_head = new ListNode(0);
ListNode dummy_head = node_head;
while(head!=null) {
if(head.val!=val) {
System.out.println(head.val);
dummy_head.next = head;
dummy_head = dummy_head.next;
}
head = head.next;
if(head == null) dummy_head.next = null;
}
return node_head.next;
}
}
方法二:给head加一个虚拟头结点,然后在原链表上删除节点
class Solution {
//给head加一个虚拟头结点,然后在原链表上删除节点
public static ListNode removeElements(ListNode head, int val) {
if(head == null) return head;
ListNode dummy_head = new ListNode(0);
dummy_head.next = head;
ListNode node = dummy_head;
while(node.next!=null) {
if(node.next.val ==val) {
node.next = node.next.next;
}else {
node= node.next;
}
}
return dummy_head.next;
}
}
方法三:递归实现
class Solution {
//递归实现 removeElements3方法:移除掉 头节点是head的链表中的与val相同的元素
public static ListNode removeElements(ListNode head, int val) {
if(head == null) return head;
//移除掉 头节点是head.next的链表中的与val相同的元素
head.next = removeElements(head.next , val);
//然后再判断头节点是否等于val,即对头节点进行处理
if(head.val == val) {
head = head.next;
}
return head;
}
}