Pythonでノードを前面と背面から交互に配置してリンクリストを変換するプログラム
単一リンクリストがあるとすると、最後のノード、最初のノード、最後から2番目のノード、2番目のノードというようにリストを再配置する必要があります。
したがって、入力が[1,2,3,4,5,6,7,8,9]の場合、出力は[9、1、8、2、7、3、6、4、5 、]
これを解決するには、次の手順に従います。
-
c:=ノード
-
l:=新しいリスト
-
cがnullでない場合は、実行してください
-
lの最後にcの値を挿入します
-
c:=cの次
-
c:=ノード
-
cがnullでなく、lが空でない場合は、実行してください
-
cの値:=lの最後の要素の値とそれを削除します
-
c:=cの次
-
cがnullの場合、
-
ループから出てきます
-
-
cの値:=lの最後の要素の値とそれを削除します
-
c:=cの次
-
-
-
リターンノード
理解を深めるために、次の実装を見てみましょう。
例
class ListNode:
def __init__(self, data, next = None):
self.val = data
self.next = next
def 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 head
def print_list(head):
ptr = head
print('[', end = "")
while ptr:
print(ptr.val, end = ", ")
ptr = ptr.next
print(']')
class Solution:
def solve(self, node):
c = node
l = []
while c:
l.append(c.val)
c = c.next
c = node
while c and l:
c.val = l.pop()
c = c.next
if c == None:
break
c.val = l.pop(0)
c = c.next
return node
ob = Solution()
head = make_list([1,2,3,4,5,6,7,8,9])
print_list(ob.solve(head)) 入力
[1,2,3,4,5,6,7,8,9]
出力
[9, 1, 8, 2, 7, 3, 6, 4, 5, ]
-
Pythonのリンクリストからmノードの後にnノードを削除するプログラム
開始ノードが「head」で、2つの整数mとnを持つリンクリストが与えられたとします。リストをトラバースして、最初のmノードがリストに保持され、最初のmノードが削除された後の次のnノードなどのいくつかのノードを削除する必要があります。リンクリストの最後に到達するまでこれを実行します。ヘッドノードから開始し、変更されたリンクリストが返されます。 リンクリスト構造は-として与えられます Node value : <integer> next : <pointer to next node> したがって、入力が要素=[1、
-
Pythonでリンクリストをジグザグ二分木に変換するプログラム
単一リンクリストがあるとすると、次のルールを使用してそれをバイナリツリーパスに変換する必要があります- リンクリストの先頭はルートです。 後続の各ノードは、値が小さい場合は親の左の子になり、それ以外の場合は右の子になります。 したがって、入力が[2,1,3,4,0,5]の場合、出力はになります。 これを解決するには、次の手順に従います- 関数solve()を定義します。これはノードを取ります ノードがnullの場合、 nullを返す root:=ノードの値と同じ値のツリーノードを作成します 次のノードがnullでない場合、 ノードの次の値<ノードの値の場合、 ルートの左側