LeetCode(203):移除链表元素
问题描述:
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
题解一:使用头指针
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
/**
* 问题得难点在于头指针,其他得结点都可以使用node.next = node.next.next来替代。所以要虚拟头结点也就是哨兵结点,来
* 完善一个链表(拥有头指针或头结点)
*/
public ListNode removeElements(ListNode head, int val) {
ListNode guard = new ListNode(); // 哨兵节点
guard.next = head;
ListNode prev = guard;
while(prev.next != null){
if(prev.next.val == val){
prev.next = prev.next.next;
}else{
prev = prev.next;
}
}
return guard.next;
}
}
题解二:递归
/**
* 很巧妙得解法。虽然占用内存较多,但是其问题得解法能带给我们很多思考。
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null)
return null;
head.next=removeElements(head.next,val);
if(head.val==val){
return head.next; // 剔除相同值得结点。每一次递归都要剔除。
}else{
return head;
}
}
}
参考链接:https://leetcode-cn.com/problems/remove-linked-list-elements/solution/203yi-chu-lian-biao-yuan-su-by-lewis-dxstabdzew/
本文介绍了解决LeetCode 203题“移除链表元素”的两种方法:使用头指针的方法通过引入哨兵节点简化操作流程;递归方法则提供了一种直观简洁但内存消耗较大的解决方案。
847

被折叠的 条评论
为什么被折叠?



