首页 > 其他 > 详细

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

时间:2021-05-06 15:12:44      阅读:15      评论:0      收藏:0      [点我收藏+]

原题链接

题解

单指针扫描

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

/**
 * 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;
    }
}

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

原文:https://www.cnblogs.com/Lngstart/p/14734620.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!