美文网首页Go算法
(17)Go反转链表和删除链表倒数第n个节点

(17)Go反转链表和删除链表倒数第n个节点

作者: 哥斯拉啊啊啊哦 | 来源:发表于2019-05-14 18:11 被阅读0次

    1)反转链表



    解答思路如下图示:


    // 时间复杂度O(n)
    // 空间复杂度O(1)
    func reverseList(head *ListNode) *ListNode {
        var pre *ListNode = nil
        cur := head
    
        for cur != nil {
            next := cur.Next
    
            cur.Next = pre
            pre = cur
            cur = next
        }
        return pre
    }
    

    提交leetcode,通过

    2)删除链表倒数第n个节点


    一趟扫描的实现方法
    思路:定义2个索引p和q,p,q距离相差n+1个节点距离,因为链表最后一个节点是nil,
    当q==nil时,p的下一个节点p.Next为要删除的节点
    func removeNthFromEnd(head *ListNode, n int) *ListNode {
        // 虚拟头结点
        dummyHead := &ListNode{Next: head}
    
        p, q := dummyHead, dummyHead
    
        for i := 0; i < n+1; i++ {
            q = q.Next
        }
    
        for q != nil {
            p = p.Next
            q = q.Next
        }
        p.Next = p.Next.Next
    
        return dummyHead.Next
    }
    

    提交leetcode,通过

    相关文章

      网友评论

        本文标题:(17)Go反转链表和删除链表倒数第n个节点

        本文链接:https://www.haomeiwen.com/subject/zdueaqtx.html