数据结构和算法——反转单链表和判断单链表是否有环

面试算法,谈到链表,一般会考察链表的反转

思路:修改每个节点的next指针即可。创建三个变量
current:当前处理的节点
pre:当前处理的节点的前驱节点,需要赋值给current.next实现反转
nextNode:下一个要处理的节点

package main
import "fmt"
//单链表反转,对每个节点一一修改
func reverseList(l *List){
    current := l.Head
    var pre *Node
    for current != nil{
        nextNode := current.next //记录下一个修改的节点
        current.next = pre//当前节点的next就是pre
        pre = current //当前节点就是下一个节点的pre
        current = nextNode
    }
    l.Head = pre
}

判断单链表是否有环,有两个比较经典的思路

1.生成一个存放节点的set,遍历节点,判断节点是否在set中,不存在就把节点放入set,让后往下找。如果出现节点再set中,说明有环。
2.两个指针,一个慢指针一次移动一个节点,一个快指针一次移动2个节点。如果有环,连个指针会重合。

本作品采用《CC 协议》,转载必须注明作者和本文链接
用过哪些工具?为啥用这个工具(速度快,支持高并发...)?底层如何实现的?
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!