[TIL]Day 6
4123 ワード
スタックヘッダ付き接続リストノードの削除
エラーコード
すべてのノードが同じデータを持っていることを確認します.
頭部と尾部にノードの山を配置します.
ループ文は、次の操作を行います.
エラーコード
条件を戻して変更しない
先生コード
データはHeadとTail NoneではなくNoneです.
双方向接続リストノードの挿入
エラーコード
ノードカウント増加、true returnなし
双方向接続リストの削除
エラーコード
双方向接続リストのマージ
エラーコード
エラーコード
def popAfter(self, prev):
delNode = prev.next
prev.next = delNode.next
self.nodeCount -= 1
return delNode.data
def popAt(self, pos):
if pos < 1 or pos > self.nodeCount:
raise IndexError
prev = self.getAt(pos -1)
if pos == self.nodeCount:
self.tail = prev
return self.popAfter(prev)
コードの変更 def popAfter(self, prev):
delNode = prev.next
prev.next = delNode.next
if delNode.next == None:
self.tail = prev
self.nodeCount -= 1
return delNode.data
def popAt(self, pos):
if pos < 1 or pos > self.nodeCount:
raise IndexError
prev = self.getAt(pos -1)
return self.popAfter(prev)
なぜ間違っているのか分析してみましょう.Doubly Linked Lists
すべてのノードが同じデータを持っていることを確認します.
頭部と尾部にノードの山を配置します.
ループ文は、次の操作を行います.
while curr.next.next
双方向接続リストを反転エラーコード
def reverse(self):
answer = []
curr = self.tail
while curr.prev.prev:
answer.append(curr.prev.data)
curr = curr.prev
answer.append(curr.data)
return
コードの変更 def reverse(self):
answer = []
curr = self.tail
while curr.prev.prev:
answer.append(curr.prev.data)
curr = curr.prev
if curr.prev.data != None:
answer.append(curr.prev.data)
return answer
まちがった理由条件を戻して変更しない
先生コード
def traverse(self):
result = []
curr = self.head
while curr.next.next:
curr = curr.next
result.append(curr.data)
return result
もっときれいに...データはHeadとTail NoneではなくNoneです.
双方向接続リストノードの挿入
エラーコード
def insertBefore(self, next, newNode):
prevNode = next.prev
prevNode.next = newNode
next.prev = newNode
newNode.prev = prevNode
newNode.next = next
まちがった理由ノードカウント増加、true returnなし
双方向接続リストの削除
エラーコード
def popAfter(self, prev):
delNode = prev.next
prev.next = delNode.next
delNode.next.prev = prev
self.nodeCount -= 1
return delNode.data
def popBefore(self, next):
delNode = next.prev
delNode.prev.next = next
next.prev = delNode.prev
self.nodeCount -= 1
return delNode.data
def popAt(self, pos):
if pos < 1 or pos > self.nodeCount +1:
raise IndexError
return self.popAfter(self.getAt(pos-1))
エラー原因popat条件文から+1を削除双方向接続リストのマージ
エラーコード
def concat(self, L):
last = self.getAt(self.nodeCount)
last.next = L.getAt(1)
L.getAt(1).prev = last
self.nodeCount += L.nodeCount
条件を変更しましたが、コードが間違っています. def concat(self, L):
if self.nodeCount == 0 and L.nodeCount > 0:
self = L
elif self.nodeCount > 0 and L.nodeCount > 0:
last = self.getAt(self.nodeCount)
last.next = L.getAt(1)
L.getAt(1).prev = last
self.tail.prev = L.getAt(L.nodeCount)
self.nodeCount += L.nodeCount
最終変更コード def concat(self, L):
if self.nodeCount == 0 and L.nodeCount > 0:
self.head.next = L.getAt(1)
self.tail.prev = L.getAt(L.nodeCount)
self.nodeCount += L.nodeCount
elif self.nodeCount > 0 and L.nodeCount > 0:
last = self.getAt(self.nodeCount)
last.next = L.getAt(1)
L.getAt(1).prev = last
self.tail.prev = L.getAt(L.nodeCount)
self.nodeCount += L.nodeCount
Reference
この問題について([TIL]Day 6), 我々は、より多くの情報をここで見つけました https://velog.io/@du-du-zi/TILDay-6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol