一、链表的概念
之前在学习数据结构当中,虽然懂链表的原理,但一直没有实现过,通过最近的学习,掌握了链表的实现,链表实现代码如下:
class ListNode:
#构造一个生成链表函数
def __init__(self,x):
self.val = x
self.next = None
#printNode函数是来打印生成好的链表中的数据
def printNode(node):
while node:
print(node.val)
node = node.next
l1 = ListNode(1)#生成链表中节点
l2 = ListNode(2)
l3 = ListNode(3)
l1.next = l2#将节点链在一起
l2.next = l3
printNode(l1)#打印整个链表
显示结果:
二、链表相关的编程题
1、从尾到头打印链表:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode):
l = []#定义空列表存储要返回链表中的值
head = listNode#一个指针用来获取每一个节点
while head:
l.insert(0, head.val)#每次向最开始的地方插入值就会逆序存储链表
head = head.next
return l
2、链表中倒数第k个结点:输入一个链表,输出该链表中倒数第k个结点。
第一种解题思路:用链表的长度n减去第K个节点,然后剩下的值就是从链表头开始循环到n-k个,还要注意边界条件,当k的取值大于链表长度和小于0时。
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
length = 0
newHead = head
while newHead:
newHead = newHead.next
length +=1
l = length -k
if l<0 or k<0:
return None
for i in range(l):
head = head.next
return head
第二种解题思路:就是准备两个指针,第一个指针先走K长度,随后第二个指针和第一个指针一起走,前一个指针到头,后一个指针所在的位置就是倒数第k个节点。