力扣简203 移除链表元素

链表 递归 迭代 

链表的定义具有递归的性质,因此链表题目常可以用递归的方法求解。这道题要求删除链表中所有节点值等于特定值的节点,可以用递归实现。

从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身;迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。

自己写的:

测试发现未考虑一开始就是空的list 还有未考虑删除后直接为空的list的情况 所以报了两次错

package leetcode01;

import java.rmi.Remote;

/*给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
 *看到链表要先想需不需要试放删除的节点的空间*/
public class Solution203 {
    //自己写的代码:测试发现未考虑一开始就是空的list 还有未考虑删除后直接为空的list
    public static ListNode removeElements(ListNode head, int val) {
        while(head!=null && head.val==val) {
            head=head.next;
        }
        if(head==null) {
            return head;
        }
        ListNode head1=head.next;
        ListNode pre=head;
        while(head1!=null) {
            if(head1.val==val) {
                head1=head1.next;
                pre.next=head1;
            }
            else {
                pre=head1;
                head1=head1.next;
            }
        }
        return head;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ListNode head=new ListNode(1,new ListNode(1,new ListNode(1,new ListNode(1))));
        head=removeElements(head, 1);
        System.out.println(head);
    }

}

 

运用递归(自己写的):为啥人家答案就那么短

//看了递归的思路自己写的,本来不讲调用remove返回给head,是错误的,他会不断递归再返回一个值,最后return的head是第一层的head,也就是只删除了一层的结果。
    public static ListNode removeElements(ListNode head, int val) {
        if(head==null) {
            return null;
        }
        if(head.val==val) {
            head=head.next;
//            removeElements(head, val); 下面为更改的结果
            head=removeElements(head, val);
        }
        else if(head.val!=val) {
            head.next=removeElements(head.next, val);
        }
        return head;
    }

 

运用迭代:

 

 自己写的思想居然就是迭代,只不过人家加了个头节点,简便了很多!

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode temp = dummyHead;
        while (temp.next != null) {
            if (temp.next.val == val) {
                temp.next = temp.next.next;
            } else {
                temp = temp.next;
            }
        }
        return dummyHead.next;
    }
}

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/remove-linked-list-elements/solution/yi-chu-lian-biao-yuan-su-by-leetcode-sol-654m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2022-05-29 22:07  Ssshiny  阅读(25)  评论(0)    收藏  举报