题目要求移除链表元素并返回链表头结点:
目前我自己找到3种解法:
1.通过递归实现:
public static ListNode removeElements(ListNode head, int val) {
if (head == null) {
return null;
}
if (head.val == val) {
head = removeElements(head.next, val);
} else {
if (head.next != null) {
head.next = removeElements(head.next, val);
}
}
return head;
}
2.通过while增加虚拟节点
public ListNode removeElements(ListNode head, int val) {
ListNode listNode = new ListNode(-1);
listNode.next = head;
ListNode cur = listNode;
while (cur.next != null) {
if (cur.next.val == val) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return listNode.next;
}
3.通过while特殊处理头结点
public ListNode removeElements(ListNode head, int val) {
while (head != null && head.val == val) {
head = head.next;
}
ListNode current = head != null ? head.next : null;
ListNode prev = head;
while (current != null) {
if (current.val == val) {
prev.next = current.next;
} else {
prev = current;
}
current = current.next;
}
return head;
}