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となります 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

前の記事

リストの一括出力

次の記事

paizaに挑戦:B036