• 剑指 Offer 18. 删除链表的节点


    原题链接

    题解

    单指针扫描

    直接从前向后遍历,找到要删除元素的上一个元素,然后直接进行操作就可以了。在我们操作无头结点链表的时候有一个技巧:如果我们的头节点可能变化的情况下,我们可以给它加上一个头结点,这样就可以省去许多的判定,操作更加的方便。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode deleteNode(ListNode head, int val) {
            ListNode dummy = new ListNode();
            dummy.next = head;
            head = dummy;
            while(head.next != null){
                if(head.next.val == val) break;
                head = head.next;
            }
    
            if(head.next != null) head.next = head.next.next; 
    
            return dummy.next; 
        }
    }
    

    递归法

    使用递归遍历链表的时候,当遇到了要删除的元素,直接将要删除元素的下一个值返回,然后回溯赋值即可。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode deleteNode(ListNode head, int val) {
            if(head == null) return null;
            if(head.val == val) return head.next;
            head.next = deleteNode(head.next, val);
            return head;
        }
    }
    
    如有错误,欢迎指正!
  • 相关阅读:
    集合
    元组 与 字典
    列表
    练习题
    字符串的类型补充
    3月19号练习题及作业
    变量,用户交互的补充内容,以及数据内容
    Python 入门
    计算机基础
    决策树的概念及其训练
  • 原文地址:https://www.cnblogs.com/Lngstart/p/14734620.html
Copyright © 2020-2023  润新知