主要理解思路,代码就很好办
node0理解为结果集,node1理解为原始链表拷贝,node2为临时变量存放- 遍历
node1(while (node1 != null)),取出头部节点(node1 = node2),同时将剩余节点存放到临时变量(node2 = node2.next) - 将头部节点的next设为
node0(node.next = node0) node1为空,链表遍历完毕,返回结果集node0
data class Node(
var value: Int = 0,
var next: Node? = null
)
fun main() {
val node = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7)))))))
println(reverse(node))
}
fun reverse(node: Node): Node? {
var node0: Node? = null
var node1: Node? = node
var node2: Node? = node.next
while (node1 != null) {
node1.next = node0
node0 = node1
node1 = node2
if (node2 != null) {
node2 = node2.next
}
}
return node0
}