单向链表反转
2020-01-02 本文已影响0人
R7_Perfect
先定义单向链表结构
class ListNode (val id : Int) {
var next: ListNode? = null
}
假如有一个单向链表:
1->2->3->4->null
反转步骤如下
1->null
2->3->4->null
2->1->null
3->4->null
3->2->1->null
4->null
4->3->2->1->null
实现代码:
fun reverseList(_head: ListNode?): ListNode? {
var head = _head
var next: ListNode? = null
var pre: ListNode? = null
while (head != null) {
next = head.next
head.next = pre
pre = head
head = next
}
return pre
}
先将下一个节点保存起来。
next = head.next
处理当前节点的next指针,指向之前保存的pre
head.next = pre
保存当前节点为pre,给下一个使用
pre = head
准备处理当前节点的下一个节点
head = next
完整测试代码:
object Solution {
fun reverseList(_head: ListNode?): ListNode? {
var head = _head
var next: ListNode? = null
var pre: ListNode? = null
while (head != null) {
next = head.next
head.next = pre
pre = head
head = next
}
return pre
}
@JvmStatic
fun main(args: Array<String>) {
val n1 = ListNode(1)
val n2 = ListNode(2)
val n3 = ListNode(3)
val n4 = ListNode(4)
n1.next = n2
n2.next = n3
n3.next = n4
reverseList(n1)
}
}
data class ListNode (var `val`: Int) {
var next: ListNode? = null
}