【问题标题】:Print a linked list as a matrix form将链表打印为矩阵形式
【发布时间】:2021-08-29 05:50:57
【问题描述】:

我想将链表打印为矩阵形式,这个链表有 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 循环中我尝试打印它看起来像这样:

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

我不允许使用 list-comprehension、map、join 等。这就是我尝试使用 for-loop 的原因。 希望有人能帮帮我,谢谢。

【问题讨论】:

    标签: python for-loop linked-list


    【解决方案1】:

    您的尝试有几个问题:

    • LL.printLL() 已经执行了print 语句,所以你不应该执行print(LL.printLL())。通过包装print,您只需打印一个额外的NoneprintLL 不会返回任何内容。

    • 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)
    

    注意:不需要指定行数...它遵循列数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多