# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def spiralMatrix(self, m: int, n: int, head: Optional[ListNode]) -> List[List[int]]:
dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)]
indexD = 0
i, j = 0, 0
result = [[-1 for _ in range(n)] for _ in range(m)]
while head:
result[i][j] = head.val
nextI, nextJ = i + dirs[indexD][0], j + dirs[indexD][1]
if nextI < 0 or nextI >= m or nextJ < 0 or nextJ >= n or result[nextI][nextJ] != -1:
indexD = (indexD + 1) % 4
i += dirs[indexD][0]
j += dirs[indexD][1]
head = head.next
return result