天冷了,脑子冻住了,学学算法热热身。
菜鸟求勘误!
1.单链表反转
例如 A -> B-> C-> D-> null 变成 D -> C -> B -> A-> null
fun reverse(list: Node?): Node? {
var headNode: Node? = null //记录反转后的头节点
var previousNode: Node? = null//记录当前节点的前一个节点
var currentNode = list//当前节点
while (currentNode != null) {
val nextNode = currentNode.next //记录当前节点的下一个节点,以免指针丢失,1.开始 currentNode.next 指向 B
if (nextNode == null) {//说明反转结束
headNode = currentNode//将 D 赋值给头指针
}
currentNode.next = previousNode//2.到这 currentNode.next 就不指向 B 了
previousNode = currentNode //记录前一个节点, pre = null --> pre = A
currentNode = nextNode //记录当前的节点 ,cur = A --> cur = B
}
return headNode
}
步骤讲解(画图软件求推荐):
- begin : A -> B -> C -> D, head = null 、pre = null 、cur = A
- 第一轮:(null) <- A 无关联 B -> C -> D, head = null 、pre = A 、cur = B
- 第二轮:A <- B 无关联 C <- D, head = null 、pre = B 、cur = C
- 第三轮:A <- B <- C 无关联 D, head = null 、pre = C 、cur = D
- 第四轮:A <- B <- C <- D, head = D 、pre = D 、 cur = null
网友评论