1、合并两个有序链表¶
https://leetcode-cn.com/problems/merge-two-sorted-lists/
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
class Node():
def init(self, value):
self.value = value
self.next = None
return
class LinkedList():
def init(self):
self.head = None
def set_linklist(self, values):
link_list = LinkedList()
node = Node(values[0])
link_list.head = node
tail = link_list.head
for i in values[1:]:
node = Node(i)
tail.next = node
tail = tail.next
return link_list
def printway(self, linklist):
linklist = linklist.next
while linklist is not None:
print(linklist.value)
linklist = linklist.next
def combine(self,linklist1,linklist2):
temp = Node(0)
tail = temp
while linklist1 and linklist2:
if linklist1.value <= linklist2.value:
temp.next = linklist1
linklist1 = linklist1.next
elif linklist1.value > linklist2.value:
temp.next = linklist2
linklist2 = linklist2.next
temp = temp.next
while not linklist1 or not linklist2:
if linklist1 is None:
temp.next = linklist2
linklist2 = linklist2.next
if linklist2 is None:
break
if linklist2 is None:
temp.next = linklist1
linklist1 = linklist1.next
if linklist1 is None:
break
temp = temp.next
return tail
LL = LinkedList()
values_1 = [1, 2, 3]
l1 = LL.set_linklist(values_1)
values_2 = [1, 3, 4]
l2 = LL.set_linklist(values_2)
com_l = LL.combine(l1.head, l2.head)
LL.printway(com_l)
删除链表的倒数第N个节点¶
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
class Node():
def init(self, value):
self.value = value
self.next = None
return
class LinkedList():
def init(self):
self.head = None
def set_linklist(self, values): link_list = LinkedList() node = Node(values[0]) link_list.head = node tail = link_list.head for i in values[1:]: node = Node(i) tail.next = node tail = tail.next return link_list def printway(self, linklist): linklist = linklist.next while linklist is not None: print(linklist.value) linklist = linklist.next def combine(self,linklist1,linklist2): temp = Node(0) tail = temp while linklist1 and linklist2: if linklist1.value <= linklist2.value: temp.next = linklist1 linklist1 = linklist1.next elif linklist1.value > linklist2.value: temp.next = linklist2 linklist2 = linklist2.next temp = temp.next while not linklist1 or not linklist2: if linklist1 is None: temp.next = linklist2 linklist2 = linklist2.next if linklist2 is None: break if linklist2 is None: temp.next = linklist1 linklist1 = linklist1.next if linklist1 is None: break temp = temp.next return tailLL = LinkedList()values_1 = [1, 2, 3]l1 = LL.set_linklist(values_1)values_2 = [1, 3, 4]l2 = LL.set_linklist(values_2)com_l = LL.combine(l1.head, l2.head)LL.printway(com_l)
旋转链表¶
https://leetcode-cn.com/problems/rotate-list/
给定一个链表,旋转链表,将链表每个节点向右移动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