数据结构基础 | 青训营笔记

23 阅读1分钟

数据结构基础|青训营笔记

链表

链表(linked list)是物理存储上非连续的数据结构,是由节点(node)组成的。

每个节点(node)包含两部分,数据存储部分(data)和指向下一节点的指针(next)。

链表第一个节点为头结点(head),最后一个节点称为尾结点,指向(null)。

链表定义:

type ListNode struct {
    val int
    Next *ListNode
}

为了方便统一头结点的增删改操作,可以将头结点设为虚拟节点(dummy head)其数据存储部分没有实际值,指针指向实际的头结点。

链表分为:

  1. 单向链表,从头指向尾部
  2. 双向链表,每个节点可以指向下一节点(next)和上一节点(pre)
  3. 循环链表(circular linkedlist),尾结点指向下一节点为头结点
  4. 跳跃表(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
 }