最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • go 中反转链表

    go 中反转链表

    这是新开发者最喜欢问的问题。如果您上过像样的数据结构课程,那么这很简单。

    反转单个链表。

    为了实现,我选择将链表设为泛型类型。

    type node[t any] struct {
        data t
        next *node[t]
    }
    
    type linkedlist[t any] struct {
        head *node[t]
    }
    
    func (ll *linkedlist[t]) append(data t) {
        newnode := &node[t]{data: data, next: nil}
    
        if ll.head == nil {
            ll.head = newnode
            return
        }
    
        current := ll.head
        for current.next != nil {
            current = current.next
        }
        current.next = newnode
    }
    

    对于反向函数,通过认识到我们需要做的就是维护指向前一个节点的指针,然后将给定节点的“下一个”设置为前一个节点,只需一次传递即可完成。

    当我们到达末尾时,我们就知道当前节点是列表的新“头”。

    func (ll *LinkedList[T]) ReverseLinkedList() {
        var prev *Node[T] = nil
        var ptr *Node[T] = ll.Head
        for ptr != nil {
            var next *Node[T] = ptr.Next
            ptr.Next = prev
            prev = ptr
            if next == nil {
                ll.Head = ptr
            }
            ptr = next
        }
    }
    

    我们是否错过了边界条件?如果列表现在是双向链表,会增加哪些复杂性?请在评论中告诉我。

    谢谢!

    这篇文章以及本系列所有文章的代码可以在这里找到

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » go 中反转链表
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 294稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情