ListNode (もしくはLinked Lists)
LeetCodeの問題でリストを取り扱う時、リストが ListNode として与えられる場合が多々あります。コード記述欄の上の方に、デフォルトで、以下のコードが書かれているので、classだという事はなんとなくわかるのですが…
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
少し調べてみたところ、このListNodeとはLinked List(連結リスト)と呼ばれるもので、「コンピュータサイエンスで使用される最も一般的なデータ構造の一つ」だそうです。
そして、例えば [1, 2, 3] が ListNodeとして与えられた場合、以下のようにデータを保持しているようです。
[1, 2, 3] が格納された ListNode の名前を仮に “list1” として、上の図を参考に、値を出力してみます。値については .val で取得できます。また .next を使えば次の値を取得できます。
print(list1.val)
# --> 1 node1 の値が返されます
print(list1.next.val)
# --> 2 node2 の値が返されます
print(list1.next.next.val)
# --> 3 node3 の値が返されます
print(list1.next.next.next.val)
# --> AttributeError: 'NoneType' object ha no attribute 'val'
# None を参照し、そこに next が存在しないためエラーとなります
また、.next を用いて、変数に代入すれば以下の様な操作ができます。
print(list1.val)
# --> 1 ここまでは上と同じです
list2 = list1.next
print(list2.val)
# --> 2 list2にlist1のnode2以降を代入したので、list2のnode1は2となります