原理不太懂,可以讲解一下吗,附代码最好了,一个节点分别存储行,列,值?
双链表 一般是指双向链表。 和二维数组没啥关系呀。
转为链表后,只能一个一个访问了, 双向链表只是多了一个可以从尾巴开始访问。
具体题目说一下。
参考一下
class Node:
def __init__(self, data, right=None, down = None):
self.data = data
self.right = right
self.down = down
self.rows = 1
self.cols = 1
def __repr__(self):
''' 用来定义Node的字符输出,
print为输出data '''
return str(self.data)
def Show(self):
current_head = self
col_i = 1
while current_head != None:
current_index = current_head
print(current_index.data,end = "")
col_i = 1
while current_index.right != None:
print(" - > ",end = "")
current_index = current_index.right
print(current_index.data, end="")
col_i += 1
print(" - > NULL")
print("| "*col_i)
print("V " * col_i)
current_head = current_head.down
print("NULL "*col_i)
def c_DLL(arr):
# 构造函数 , 返回链表头
Node_lst = [[Node(x) for x in l] for l in arr]
head = Node_lst[0][0]
head.rows = len(arr)
head.cols = len(arr[0])
for i in range(len(Node_lst)-1):
for j in range(len(Node_lst[i])-1):
Node_lst[i][j].right = Node_lst[i][j+1]
Node_lst[i][j].down = Node_lst[i+1][j]
Node_lst[i][-1].down = Node_lst[i + 1][-1]
i = -1
for j in range(len(Node_lst[i]) - 1):
Node_lst[i][j].right = Node_lst[i][j + 1]
return head
val_2DMatrix = [[1,2,3],[4,5,6],[7,8,9]]
head = c_DLL(val_2DMatrix)
head.Show()