19. 删除链表的倒数第 N 个结点

42 阅读1分钟

题目

给你一个链表,删除链表的倒数第 n **个结点,并且返回链表的头结点代码

19. 删除链表的倒数第 N 个结点

分析

典型双指针快慢指针问题,唯一需要注意的时是遍历过程为null判断及特殊情况(如 n =链表长度 或者n大于链表长度)

fun removeNthFromEnd(head: ListNode?, n: Int): ListNode? {
    var fast = head
    var num = n
    while (fast != null && num > 0) {
        fast = fast.next
        num--
    }
    if (fast == null) return if(num == 0) head!!.next else head
    var slow = head
    while (fast!!.next != null) {
        slow = slow!!.next
        fast = fast.next
    }

    slow.takeIf { it!!.next !=null }?.next = slow!!.next!!.next
    return head
}

关于我

一个希望友友们能提出建议的代码下毒糕手