将链表打印为矩阵形式

Print a linked list as a matrix form

我想将链表打印成矩阵形式,这个链表有 nxm 个值,所以我想将这些值打印成矩阵形式。

class Node:
    def __init__(self, data=None, next=None):
        self.data = data
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None

    def insert(self, data):
        newNode = Node(data)
        if(self.head):
            current = self.head
            while(current.next):
                current = current.next
            current.next = newNode
        else:
            self.head = newNode

    def printLL(self):
        current = self.head
        while(current):
            print(current.data)
            current = current.next
            
LL = LinkedList()
LL.insert(19)
LL.insert(96)
LL.insert(87)
LL.insert(73)
LL.insert(56)
LL.insert(48)
LL.insert(98)
LL.insert(87)
LL.insert(90)
LL.insert(78)
LL.insert(9)
LL.insert(16)
LL.insert(84)
LL.insert(90)
LL.insert(46)
LL.insert(88)
LL.insert(66)
LL.insert(12)
LL.insert(80)
LL.insert(44)
LL.insert(21)
LL.insert(18)
LL.insert(36)
LL.insert(76)
LL.insert(98)
LL.insert(25)
LL.insert(7)
LL.insert(15)
#LL has 28 values because of 4x7 matrix
rows = 4
columns = 7

#Here I tried to print in a matrix form
for i in range(rows):
    for j in range(columns):
        print(LL.printLL())

在 for-loop 中,我尝试打印它看起来像这样:

19 , 96 , 87 , 73 , 56 , 48 , 98
87 , 90 , 78 , 9 , 16 , 84 , 90
46 , 88 , 66 , 12 , 80 , 44 , 21
18 , 36 , 76 , 98 , 25 , 7 , 15

但我只是得到:

19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None
19
96
87
73
56
48
98
87
90
78
9
16
84
90
46
88
66
12
80
44
21
18
36
76
98
25
7
15
None

我不允许使用列表理解、映射、连接等。这就是我尝试使用 for 循环的原因。 希望有人能帮帮我,谢谢。

您的尝试有几个问题:

  • LL.printLL() 已经执行了 print 语句,所以你不应该执行 print(LL.printLL())。通过包装 print 你只会打印一个额外的 None: printLL 不会 return 任何东西。

  • LL.printLL() 打印整个列表,因此在循环中重复它只会打印整个列表

我建议为 printLL 定义一个可选参数,您可以用它告诉它您想要多少列。默认情况下,该参数可以获得一个非常大的值(如 float("inf")),这实际上意味着列表将打印在一行上,就像现在已经做的那样。

然后让printLL中的循环检查当前列表元素的序号是否是列数的倍数。如果是这样,让它打印 end="\n" 而不是 end=" ".

最后,您的主程序代码应该只调用一次 printLL 并将所需的列数作为参数传递:

def printLL(self, width=float("inf")):
    current = self.head
    i = 0
    while(current):
        i += 1
        print(current.data, end=" " if i % width else "\n")
        current = current.next
    if i % width:
        print()

在主程序中:

columns = 7
printLL(columns)

注意:无需指定行数...它来自列数。