美文网首页算法研究所
详解链表的头插法与尾插法

详解链表的头插法与尾插法

作者: 百里江山 | 来源:发表于2020-02-11 14:54 被阅读0次

    概述

    头插法
    新的节点插入到链表的头部.
    关键步骤就是创建一个指针时, next指针指向已有链表上. 然后将新的节点赋值给head指针.从而实现头插法

    尾插法
    新的节点插入到链表的尾部.
    首先创建一个空的头指针, 然后再赋值给end一个尾指针.循环操作时,只移动end尾指针.即实现尾插法.

    定义节点结构

    //定义节点结构.
    type ListNode struct {
         Val int        //值域
         Next *ListNode //下一个节点指针
     }
    

    头插法代码实现

    //头插法, 意思就是每次插在头部, 已有的元素的前面. 如1,2,3, 头插法结果就是: 3, 2, 1
    //头插法的关键在于: 建一个头指针, 循环时,每次创建一个新节点, 将新节点的后续节点指针头指针.以次类推
    func HeadInsert(arr []int) *ListNode {
        length := len(arr) //计算数组的长度
        var head *ListNode //创建一个空头指针
        for i := 0; i < length; i ++ { //循环数组
            node := &ListNode{Val:arr[i]} //创建一个节点.用于插到头部位置的节点
            node.Next = head //将之前头指针连接到新的节点尾部. 这样就是头插法的关键.
            head = node  //将上一步连接好的远整链表赋值给头指针. 待下次循环,继续头插法.
        }
        return head //返回头指针.
    }
    

    重要的两行代码

    node.Next = head //将之前头指针连接到新的节点尾部. 这样就是头插法的关键.
    head = node  //将上一步连接好的远整链表赋值给头指针. 待下次循环,继续头插法.
    

    尾插法代码实现

    func TailInsert(arr []int) *ListNode {
        head := new(ListNode) //初始一个空指针节点,即头指针节点.
        end := head //再创建一个尾指针
        for i := 0; i < len(arr); i ++  { //遍历数组
            node := &ListNode{Val:arr[i]} //创建一个新的节点.
            end.Next = node //把新的节点赋值给尾指针的next指针.实现尾指针操作.
            end = node      //新的节点指向尾指针.让下一次操作,继续指向尾部.
        }
        return head.Next //返回指针的next. 因为初始指针时,是一个空节点.不返回.
    }
    
    

    重要的两行代码

    end.Next = node //把新的节点赋值给尾指针的next指针.实现尾指针操作.
    end = node      //新的节点指向尾指针.让下一次操作,继续指向尾部.
    

    相关文章

      网友评论

        本文标题:详解链表的头插法与尾插法

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