概述
头插法
新的节点插入到链表的头部.
关键步骤就是创建一个指针时, 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 //新的节点指向尾指针.让下一次操作,继续指向尾部.
网友评论