链表OJ题之移除链表元素 (leetcode力扣 203)

题目 : 删除链表中等于给定值val的所有结点

示例 :

    输入 : 1 -> 2 -> 6 -> 3 -> 4 ->5 -> 6   val = 6

    输出 : 1 -> 2 -> 3 -> 4 -> 5

先来分析一下这道题, 简单理一下思路

我们可以依次遍历链表中的每一个结点, 如果结点的值不是val, 就把结点尾插到结果链表中

方法一 : 

        public ListNode removeElements(ListNode head, int val) {
            ListNode result = null;
            ListNode last = null;

            ListNode cur = head;
            while (cur != null) {
                ListNode next = cur.next;
                if (cur.val != val) {
                    //如果当前值不是val, 就把当前值尾插到result链表上
                    //尾插
                    cur.next = null;
                    if (result == null) {
                        result = cur;
                    } else {
                        last.next = cur;
                    }//尾插结束

                    last = cur;//更新结果链表的最后一个结点
                }
                cur = next;
            }
            return result;
        }

方法二 : 

        public ListNode removeElements2(ListNode head, int val) {
            if (head == null) {
                return null;
            }
            ListNode cur = head;

            while (cur.next != null) {
                if (cur.next.val != val) {
                    cur = cur.next;
                } else {
                    cur.next = cur.next.next;
                }
            }
            if(head.val == val){
                return head.next;
            }else{
                return head;
            }
        }

方法三 : 

            public ListNode removeElements3 (ListNode head,int val){
                //使用递归实现
                if (head == null) {
                    return null;
                }
                head.next = removeElements(head.next, val);
                return head.val == val ? head.next : head;
            }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值