1、2つの命じたリストをマージ
2は、新たなソートされたリストとリターンにリストを命じました。新しいリストは、二つのリストで構成与えられたモザイク内のすべてのノードです。
例:
入力:1-> 2-> 4、1-> 3-> 4
出力:1-> 1-> 2-> 3-> 4-> 4
def mergetwoLists(self, l1, l2):
if l1 is None:
return l2
elif l2 is None:
return l1
elif l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
2、Nノードのリストを削除するカウントダウン
ヘッドノードリストにリスト、n個のノードの削除リストの逆数とリターンを考えます。
例:
2 1-> 2-> 3-> 4-> 5、およびn =リストが与えられます。
除去された最後から二番目のノードは、リストは、1-> 2-> 3-> 5になると。
def removeNthFromEnd(self, head, n):
if not head or n<=0: #链表为空或者n无效
return head
p = ListNode(-1) #建造一个虚拟节点,方便边界处理
p.next = head
#一次遍历得到链表长度
a = p
k = 0
while a.next:
a = a.next
k = k+1
if k<n: #n无效
return head
#二次遍历找到需要删除的节点
b = p
num = k-n #需删除的前一个节点位置
while num > 0:
b = b.next
num = num-1
b.next = b.next.next #将指针指向删除节点的后一位
return p.next
3、回転一覧
リスト、回転のリスト、右側にノードリストの各k個の位置によって与えられ、前記kは非負です。
例:
入力: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
def rotateRight(self, head, k):
if not head:
return None
if not head.next:
return head
old_tail = head
n = 1
while old_tail.next: #计算链表长度
old_tail = old_tail.next
n = n+1
old_tail.next = head #构造成环状
new_tail = head
m = n - k % n -1
while m:
new_tail = new_tail.next #新的尾结点的位置
m = m-1
new_head = new_tail.next #新的头结点的位置
new_tail.next = None #切断这个环
return new_head