【LeetCode】Reverse a Linked List 解法【Python】
スポンサードリンク
Reverse a Linked List
独自のリンクリストクラスを逆順にする問題。こういうのは現実問題として結構多いと思う。 解放としては、愚直にやるしかないって感じ。再帰使ったやりかたもあるが、可読性が下がるのであまり好きじゃない。
leetcodeの記述を前提としているのでヘルパークラスみたいな実装になっているが、 実際はリンクリストクラス自身にreverseをつけてもいいと思うんだが、どうなんだろ。
コード
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseList(self, head: ListNode) -> ListNode: if head is None: return None next_ = head.next pre_node = ListNode(val= head.val, next=None) if next_ is None: return pre_node while next_ is not None: val = next_.val nxt = pre_node rev_node = ListNode(val=val, next=nxt) pre_node = rev_node next_ = next_.next return rev_node
ちょっとコードが汚い。 headがNoneのときはいいとして、 headだけで終わっている場合(連結がない場合)のifは不要だと思うのできれいにできそう。
solutionに書いてあったきれいなコード↓
class Solution: # @param {ListNode} head # @return {ListNode} def reverseList(self, head): prev = None while head: curr = head head = head.next curr.next = prev prev = curr return prev