Pythonの回文リンクリスト
これを解決するには、次の手順に従います-
-
高速:=ヘッド、低速:=ヘッド、回転:=なし、フラグ:=1
-
ヘッドが空の場合は、trueを返します
-
高速で次の高速が利用可能です
-
next of fastが使用可能な場合は、フラグ:=0を設定し、ループを解除します
-
fast:=next of the next of fast
-
temp:=遅い、遅い:=次の遅い
-
次のtemp:=rev、およびrev:=temp
-
-
fast:=next of slow、next of slow:=rev
-
フラグが設定されている場合、slow:=next of slow
-
高速と低速はなしではありませんが、
-
fastの値がslowの値と同じでない場合は、falseを返します
-
fast:=next of fast、slow:=next of slow
-
-
trueを返す
例(Python)
理解を深めるために、次の実装を見てみましょう-
class ListNode:def __init __(self、data、next =None):self.data =data self.next =nextdef make_list(elements):head =ListNode(elements [0])for element in elements [1:] :ptr =head while ptr.next:ptr =ptr.next ptr.next =ListNode(element)return headclass Solution(object):def isPalindrome(self、head):fast、slow =head、head rev =None flag =1ヘッドでない場合:高速で高速の場合はTrueを返します。次の場合:高速でない場合は次のようになります。 (fast.val)fast =slow.next slow.next =rev ifフラグ:slow =slow.next while fast and slow:if fast.data!=slow.data:return False fast =fast.next slow =slow.next Truehead =make_list([1,2,3,2,1])ob1 =Solution()print(ob1.isPalindrome(head))入力
[1,2,3,2,1]出力
True
-
Python –回文数で行列を並べ替える
回文数に基づいて行列をソートする必要がある場合は、リストをパラメーターとして受け取るメソッドが定義されます。リスト内包表記と「結合」メソッドを使用して、要素が回文であるかどうかを繰り返して確認します。これに基づいて、結果が決定され、表示されます。 例 以下は同じもののデモンストレーションです def get_palindrome_count(row): return len([element for element in row if''.join(list(reversed(element))) == element]) my_list = [[&
-
Pythonのリンクリストからmノードの後にnノードを削除するプログラム
開始ノードが「head」で、2つの整数mとnを持つリンクリストが与えられたとします。リストをトラバースして、最初のmノードがリストに保持され、最初のmノードが削除された後の次のnノードなどのいくつかのノードを削除する必要があります。リンクリストの最後に到達するまでこれを実行します。ヘッドノードから開始し、変更されたリンクリストが返されます。 リンクリスト構造は-として与えられます Node value : <integer> next : <pointer to next node> したがって、入力が要素=[1、