[Swift实际操作]八、实用进阶-(9)Swift中的链表LinkedList详解
链表是一种物理存储单元上的非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。
相比于线性表的顺序结构,链表比较方便插入和删除操作。本文将讲解如何模拟一个链表。
1 //链表的节点类 2 class ListNode 3 { 4 //链表的节点由两部分组成:数据域、指针域 5 //添加一个整形类型的数组属性,作为链表的数据域 6 var content:Int 7 //添加一个节点类型的属性,作为存储下一个节点地址的指针 8 var nextNode: ListNode? 9 10 //节点类初始化方法 11 init(_ content:Int) 12 { 13 //对节点的两个部分进行初始化 14 self.content = content 15 self.nextNode = nil 16 } 17 } 18 19 //链表类 20 class LinkedList 21 { 22 //头节点 23 var head:ListNode? 24 //尾节点 25 var end:ListNode? 26 27 //链表头插节点 28 func appendToHead(content:Int) 29 { 30 //判断头结点是否为空 31 if head == nil 32 { 33 //如果链表为空则初始化, 34 //使其即是头结点,也是尾节点 35 head = ListNode(content) 36 end = head 37 } 38 else 39 { 40 //如果链表不为空,则初始化一个临时节点, 41 let temporaryNode = ListNode(content) 42 //将临时节点的指针指向头结点, 43 temporaryNode.nextNode = head 44 //然后临时节点变为新的头结点 45 head = temporaryNode 46 } 47 } 48 49 //链表尾插节点 50 //链表头插节点 51 func appendToEnd(content:Int) 52 { 53 //判断尾结点是否为空 54 if head == nil 55 { 56 //如果链表为空则初始化, 57 //使其即是头结点,也是尾节点 58 end = ListNode(content) 59 head = end 60 } 61 else 62 { 63 //如果链表不为空,则初始化一个新节点, 64 //将指向尾节点的新指针指向新节点 65 end?.nextNode = ListNode(content) 66 //然后新节点作为链表尾结点 67 end = nd?.nextNode 68 } 69 } 70 }