一、链表的基本概念及特点
链表是计算机科学中一种常见的数据结构,它由一系列结点(Node)组成,每个结点包含数据域和指针域。链表具有特点:
1. 无界性:链表可以无限地增加或减少结点。
2. 可动态改变:链表在运行过程中可以动态地插入或删除结点。
3. 无序性:链表中的元素可以任意插入或删除,不受顺序的限制。
二、链表的分类
根据指针的方向,链表可以分为几类:
1. 单向链表:每个结点只有一个指针,指向下一个结点。
2. 双向链表:每个结点有两个指针,一个指向前一个结点,一个指向下一个结点。
3. 循环链表:链表的一个结点的指针指向第一个结点,形成一个环。
三、单向链表的实现与操作
是一个单向链表的实现及基本操作的示例:
python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def create_list(values):
head = ListNode(values[0])
current = head
for val in values[1:]:
current.next = ListNode(val)
current = current.next
return head
def print_list(head):
current = head
while current:
print(current.val, end=' ')
current = current.next
print()
def insert_list(head, index, val):
new_node = ListNode(val)
if index == 0:
new_node.next = head
return new_node
current = head
for i in range(index – 1):
if current.next is None:
raise Exception("Index out of range")
current = current.next
new_node.next = current.next
current.next = new_node
return head
def delete_list(head, index):
if index == 0:
return head.next
current = head
for i in range(index – 1):
if current.next is None:
raise Exception("Index out of range")
current = current.next
current.next = current.next.next
return head
以上代码中,`ListNode`类定义了链表的结点结构,`create_list`函数用于创建链表,`print_list`函数用于打印链表,`insert_list`函数用于在指定位置插入结点,`delete_list`函数用于删除指定位置的结点。
四、双向链表的实现与操作
是一个双向链表的实现及基本操作的示例:
python
class DoubleListNode:
def __init__(self, val=0, prev=None, next=None):
self.val = val
self.prev = prev
self.next = next
def create_double_list(values):
head = DoubleListNode(values[0])
current = head
for val in values[1:]:
current.next = DoubleListNode(val)
current.next.prev = current
current = current.next
return head
def print_double_list(head):
current = head
while current:
print(current.val, end=' ')
current = current.next
print()
def insert_double_list(head, index, val):
new_node = DoubleListNode(val)
if index == 0:
new_node.next = head
if head:
head.prev = new_node
return new_node
current = head
for i in range(index – 1):
if current.next is None:
raise Exception("Index out of range")
current = current.next
new_node.next = current.next
if current.next:
current.next.prev = new_node
current.next = new_node
new_node.prev = current
return head
def delete_double_list(head, index):
if index == 0:
return head.next
current = head
for i in range(index – 1):
if current.next is None:
raise Exception("Index out of range")
current = current.next
if current.next:
current.next.prev = current.prev
if current.prev:
current.prev.next = current.next
return head
以上代码中,`DoubleListNode`类定义了双向链表的结点结构,`create_double_list`函数用于创建双向链表,`print_double_list`函数用于打印双向链表,`insert_double_list`函数用于在指定位置插入结点,`delete_double_list`函数用于删除指定位置的结点。
五、循环链表的实现与操作
是一个循环链表的实现及基本操作的示例:
python
class CircleListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def create_circle_list(values):
head = CircleListNode(values[0])
current = head
for val in values[1:]:
current.next = CircleListNode(val)
current = current.next
current.next = head
return head
def print_circle_list(head):
if not head:
print("The list is empty")
return
current = head
while True:
print(current.val, end=' ')
current = current.next
if current == head:
break
print()
def insert_circle_list(head, index, val):
new_node = CircleListNode(val)
if index == 0:
new_node.next = head
head.prev = new_node
return new_node
current = head
for i in range(index – 1):
current = current.next
if current == head:
raise Exception("Index out of range")
new_node.next = current.next
new_node.prev = current
current.next = new_node
return head
def delete_circle_list(head, index):
if index == 0:
if head.next == head:
return None
head.prev.next = head.next
head.next.prev = head.prev
return head.next
current = head
for i in range(index – 1):
current = current.next
if current == head:
raise Exception("Index out of range")
current.next = current.next.next
return head
以上代码中,`CircleListNode`类定义了循环链表的结点结构,`create_circle_list`函数用于创建循环链表,`print_circle_list`函数用于打印循环链表,`insert_circle_list`函数用于在指定位置插入结点,`delete_circle_list`函数用于删除指定位置的结点。
六、
本文介绍了计算机专业面试中常见的链表包括单向链表、双向链表和循环链表的实现及基本操作。掌握链表的相关知识对于计算机专业的面试具有重要意义。在实际开发过程中,链表是一种常用的数据结构,可以解决许多实际。希望本文能够帮助您在面试中取得好成绩。
还没有评论呢,快来抢沙发~