特殊なリスト:Nの最後から二番目のノードにリンクされたリストのチェーン回転+ Leetcode 61にリストLeetcode 19 + Leetcode 24二十から二スイッチングノードを削除します
Nノードのリストを削除する逆数Leetcode 19
タイトル説明
ヘッドノードリストにリスト、n個のノードの削除リストの逆数とリターンを考えます。
例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
説明:
Nは、効果的な確保するために与えられています。
高度:
あなたはそれを達成するために、1つのパスを使用しようとすることができますか?
問題の解決策
興奮するとして、我々は最後に実行します。直接この高度な要求に対処します。
我々は、2つのノードが必要です。==ヘッドノードから出発;位置+ Nのノードを開始最初からノード。==次に、第2のノードは、時間の終わりに達した場合、ノードのヘッドノードの下の場所を削除することです。そして、削除位置が簡単にこの問題を解決することができます国境を議論のポイントです追加します。
状況のこれらのタイプは、境界点にあります。
- ノードが削除されたときに、ヘッドノード
- 削除されたノードがエンド・ノードであります
このような全体の機能:
class Solution(object):
def removeNthFromEnd(self, head, n):
front = head
second = None
count = 0
flag = 0
while front:
if front.next:
front = front.next
count = count + 1
if count > n-1:
if flag == 0:
second = head
flag = 1
else:
second = second.next
else:
break
if second == None:
res = head.next
head = None
return res
else:
if second.next:
temp = second.next.next
second.next = temp
temp = None
else:
second.next = None
return head
業績
実行すると:16ミリ秒
メモリ消費量:11.7メガバイト
リンクされたリスト内のLeetcode 24二十から二スイッチングノード
タイトル説明
隣接ノードとのリストのペアごとの交換を考えると、交換にリストを返します。
あなたは、単に内部ノード値を変更しますが、実際のノード交換する必要がないことができます。
例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
問題の解決策
ない任意の特定の方法は、一つのノードのみまたは終了トラバーサルの後がない場合は、後続ノード、為替への2つの間、再び先頭からトラバースすることです。次のように全体のプロセスは次のとおりです。
class Solution(object):
def swapPairs(self, head):
if not head:
return head
cur1 = head
cur2 = head.next
if not cur2:
return head
while True:
if cur1 == head:
cur1.next = cur2.next
cur2.next = cur1
head = cur2
else:
if not cur1.next:
break
else:
if not cur1.next.next:
break
else:
temp1 = cur1.next
temp2 = cur1.next.next
temp1.next = temp2.next
cur1.next = temp2
temp2.next = temp1
cur1 = temp1
return head
業績
Leetcode 61回転チェーン
タイトル説明
リスト、回転のリスト、右側にノードリストの各k個の位置によって与えられ、前記kは非負です。
例1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
例2:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL
問題の解決策
実際には、そう従順ではない、彼は何回かは、我々はリスト全体の長さを見つけることができれば、数回動かして移動すると、ちょうど移動 その上に。
まず、一緒になって環へのリストの最後に最初の接続端部(連結鎖長を決定することができる場合)、次いでヘッドノードは、歩行を開始します ステップ、点が新ヘッドノードは、ここではこのように先にリストの末端に接続され、既に鎖として(その上に、このノードの出力が切断されA)。
コードは以下の通りであります:
class Solution(object):
def rotateRight(self, head, k):
if (not head) | (k == 0):
return head
elif not head.next:
return head
cur = head
length = 1
while cur.next:
cur = cur.next
length = length + 1
cur.next = head
k = k % length
if k == 0:
cur.next = None
return head
cur = head
for i in range(1, length - k):
cur = cur.next
head = cur.next
cur.next = None
return head
業績
実行時間:24ミリ秒
メモリ消費量:11.9メガバイト