请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于链表删除元素的问题

public class Solution3 {
    public ListNode removeElements(ListNode head, int val) {
        //首先需要判断第一个元素是否为val,同时也需要判断head是否为空
        while (head!=null&&head.val==val){
            //进行删除
            //将head设置为待删除的节点
            ListNode delNode = head;
            //将head向后移动一位
            head = head.next;
            //将delNode与链表断开
            delNode.next = null;
        }

        //如果链表中全是需要删除的元素时,链表就是空的
        if (head==null){
            //返回空
            return null;
        }

        //如果链表的中间有val
        //需要从头开始向后移动,设置prev
        ListNode prev = head;
        //如果prev的下一个不为空,进行循环
        while (prev.next!=null){
            //如果prev的下一个值等于val,就进行删除
            if (prev.next.val==val){
                //创建待删除的节点
                ListNode delNode = prev.next;
                //将prev.next指向retNode.next,相当于跳过了delNode
                prev.next = delNode.next;
                //将retNode与链表断开
                delNode.next = null;
            }else {
                //如果不相同就将prev向后移动
                prev = prev.next;
            }
        }
        //条件不满足时,返回head
        return head;
    }

    public static void main(String[] args) {
        int[] arr = {1,1};
        int val = 1;

        ListNode head = new ListNode(arr);
        System.out.println(head);

        (new Solution3()).removeElements(head, val);
        System.out.println(head);
    }
}

老师,为什么如果在数组中输入两个相同的数,在while循环中不能全部删掉,我按照视频中的代码对比了while循环中的内容,没有差别呀

正在回答

1回答

liuyubobobo 2019-03-30 01:35:44

你的逻辑没有问题的,你的测试方法不对。


removeElements是有返回值的,返回的是执行删除以后链表的头结点。你要看最后删除的结果,要看返回值的链表是什么。


所以,main的最后两行应该是这样的:

ListNode res = (new Solution3()).removeElements(head, val);
System.out.println(res);


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_往事_8 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-03-30 09:54:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信