Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの回文リンクリスト


リンクリストがあるとします。リスト要素がアパリンドロームを形成しているかどうかを確認する必要があります。したがって、リスト要素が[1,2,3,2,1]のような場合、これは回文です。

これを解決するには、次の手順に従います-

  • 高速:=ヘッド、低速:=ヘッド、回転:=なし、フラグ:=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 

  1. Python –回文数で行列を並べ替える

    回文数に基づいて行列をソートする必要がある場合は、リストをパラメーターとして受け取るメソッドが定義されます。リスト内包表記と「結合」メソッドを使用して、要素が回文であるかどうかを繰り返して確認します。これに基づいて、結果が決定され、表示されます。 例 以下は同じもののデモンストレーションです def get_palindrome_count(row):    return len([element for element in row if''.join(list(reversed(element))) == element]) my_list = [[&

  2. Pythonのリンクリストからmノードの後に​​nノードを削除するプログラム

    開始ノードが「head」で、2つの整数mとnを持つリンクリストが与えられたとします。リストをトラバースして、最初のmノードがリストに保持され、最初のmノードが削除された後の次のnノードなどのいくつかのノードを削除する必要があります。リンクリストの最後に到達するまでこれを実行します。ヘッドノードから開始し、変更されたリンクリストが返されます。 リンクリスト構造は-として与えられます Node    value : <integer>    next : <pointer to next node> したがって、入力が要素=[1、