数据结构基础|青训营笔记
链表
链表(linked list)是物理存储上非连续的数据结构,是由节点(node)组成的。
每个节点(node)包含两部分,数据存储部分(data)和指向下一节点的指针(next)。
链表第一个节点为头结点(head),最后一个节点称为尾结点,指向(null)。
链表定义:
type ListNode struct {
val int
Next *ListNode
}
为了方便统一头结点的增删改操作,可以将头结点设为虚拟节点(dummy head)其数据存储部分没有实际值,指针指向实际的头结点。
链表分为:
- 单向链表,从头指向尾部
- 双向链表,每个节点可以指向下一节点(next)和上一节点(pre)
- 循环链表(circular linkedlist),尾结点指向下一节点为头结点
- 跳跃表(skiplist),是一种有序数据结构,每个节点保存有多个指向其他节点的指针,从而能够快速访问节点。
移除链表元素:
就是将目标节点的前一节点的next指向目标节点的后一节点:node->next = node->next->next
/*
*链表定义
*type ListNode struct {
* Val int
* Next *ListNode
*}
*/
func removeElements(head *listNode, val int) *ListNode {
dummyHead := &ListNode{}
dummyHead.Next = head
cur := dummyHead
for cur != nil && cur.Next != nil {
if cur.Next.Val == val {
cur.Next = cur.Next.Next
} else {
cur = cur.Next
}
}
return dummyHead.Next
}