用kotlin解决这个问题:19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入:head = [1], n = 1 输出:[] 示例 3: 输入:head = [1,2], n = 1 输出:[1] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz
时间: 2023-12-24 08:03:37 浏览: 84
一个涵盖了计算机基础、Java、Android、Kotlin等相关知识的总结性文档.zip
好的,我可以用 Kotlin 为您编写一个解决该问题的函数,如下所示:
```kotlin
class ListNode(var `val`: Int) {
var next: ListNode? = null
}
fun removeNthFromEnd(head: ListNode?, n: Int): ListNode? {
val dummy = ListNode(0)
dummy.next = head
var first: ListNode? = dummy
var second: ListNode? = dummy
for (i in 1..n+1) {
first = first?.next
}
while (first != null) {
first = first.next
second = second?.next
}
second?.next = second?.next?.next
return dummy.next
}
```
这个函数使用了双指针的方法,时间复杂度为 O(n),空间复杂度为 O(1)。您可以将该函数直接复制到 Kotlin 代码中并运行,如下所示:
```kotlin
fun main() {
val head = ListNode(1)
head.next = ListNode(2)
head.next?.next = ListNode(3)
head.next?.next?.next = ListNode(4)
head.next?.next?.next?.next = ListNode(5)
val n = 2
var current = removeNthFromEnd(head, n)
while (current != null) {
print("${current.`val`} ")
current = current.next
}
}
```
您可以将上面的代码复制到 Kotlin 的 REPL 环境中并运行,将会输出 `[1, 2, 3, 5]`。
阅读全文