kotlin 链表反转

484 阅读1分钟

主要理解思路,代码就很好办

  1. node0 理解为结果集,node1 理解为原始链表拷贝,node2 为临时变量存放
  2. 遍历node1(while (node1 != null)),取出头部节点(node1 = node2),同时将剩余节点存放到临时变量(node2 = node2.next)
  3. 将头部节点的next设为node0 (node.next = node0)
  4. 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
}