1、重排链表(栈,递归)
给定一个单链表 L 的头节点 head ,单链表 L 表示为:
L0 → L1 → … → Ln-1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入: head = [1,2,3,4]
输出: [1,4,2,3]
示例 2:
输入: head = [1,2,3,4,5]
输出: [1,5,2,4,3]
提示:
- 链表的长度范围为 [1, 5 * 104]
- 1 <= node.val <= 1000
选项代码:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def reorderList(self, head):
"""
:type head: ListNode
:rtype: None Do not return anything, modify head in-place instead.
"""
if not head:
return
stack = []
s = head
while s.next:
stack.append(s.next)
s = s.next
s = head
n = 0
while stack:
if n % 2 == 0:
one = stack.pop()
else:
one = stack.pop(0)
one.next = None
s.next = one
s = s.next
n += 1
2、编写Python程序实现素数处理的功能(散列表,算法中阶)
贡献者:WO520AI
编写Python程序实现素数处理的功能,要求如下:
(1)从键盘输入一个整数X,编写一个函数Find(x=100),找出1—X之间的所有的素数(即质数),并将这些素数按照升序存放在列表 prime_list []中。
(2)在程序中编写一个函数delete_seven( prime_list),将 prime_list []中个位含有7的素数删除;
【程序要求:】
(1)有引导用户键盘输入的提示信息,言语要恰当;
(2)函数Find(x=100)实现要正确,实现列表 prime_list []中查询到的素数的输出;
(3)函数delete_seven( prime_list)实现正确,输出删除指定素数后的相关数据信息。
选项代码:
def find(x=100):
pl = []
for m in range(2,x+1):
for k in pl:
if m % k == 0:
break
else:
pl.append(m)
return pl
def delete_seven(pl):
return [x for x in pl if x%10!=7]
x = int(input('输入一个整数:'))
prime_list = find(x)
print(prime_list)
print(delete_seven(prime_list))
3、全排列(数组,回溯)
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
选项代码:
class Solution:
def permute(self, nums):
e = []
if (len(nums) == 1):
return [nums]
for i in range(len(nums)):
q = self.permute(nums[:i] + nums[i + 1:])
for c in q:
e.append([nums[i]] + c)
return e
# %%
s = Solution()
print(s.permute(nums=[1, 2, 3]))