250
'''250,输入若干个数,以读到0为结尾(0只是结束符,不算数字)构建一个双循环链表'''
data_a=[]
head_a=-1
s=input("输入若干个数:")
num = [int(n) for n in s.split()]
print(num)
data_a.append([int(num[0]),head_a,head_a])
print(data_a)
head_a=0
i=1
while(num[i]!=0):
data_a.append([int(num[i]),data_a[i-1][1],i-1])
#print('1:',data_a)
data_a[i-1][1]=i
print( data_a)
i+=1
data_a[i-1][1]=0
print(data_a)
251
'''
251,输入若干个数,以读到0为结尾(0只是结束符,不算数字)构建一个直线双链表。
然后再输入M个数,每次给出一个数字K,表示要把链表中的第K个数字删除。请编程输出删除后的链表。
'''
data_a=[]
head_a=-1
s=input("输入若干个数:")
num = [int(n) for n in s.split()]
print(num)
data_a.append([int(num[0]),head_a,head_a])
print(data_a)
head_a=0
i=1
while(num[i]!=0):
data_a.append([int(num[i]),data_a[i-1][1],i-1])
data_a[i-1][1]=i
i+=1
data_a[i-1][1]=-1
print(data_a)
M=input("输入M:")
add_M= [int(n) for n in input('输入M个数字:').split()]
print(add_M)
k=i
for j in range(int(M)):
data_a[i-1][1]=i
data_a.append([int(add_M[j]), data_a[k-1][1], k-1])
data_a[k - 1][1] =k
k+=1
j+=1
data_a[k - 1][1] = -1
print(data_a)
K=input("输入K:")
# for p in range(int(K)-1):
# temp=data_a[p][0]
p=int(K)-1
data_a[p-1][1]=data_a[p][1]
data_a[p+1][2]=data_a[p][2]
print('jieguo:',data_a)
253
'''
253,有N个人编号1到N,现在环形站位,从第1个人开始数1,以此类推,
直到一个人数到K了,这个人则退圈。输入N,K,利用双循环链表,依次输出退圈的编号。
'''
data_a=[]
head_a=-1
s=input("输入若干个数:")
num = [int(n) for n in s.split()]
print(num)
data_a.append([int(num[0]),head_a,head_a])
print(data_a)
head_a=0
i=1
while(num[i]!=0):
data_a.append([int(num[i]),data_a[i-1][1],i-1])
data_a[i-1][1]=i
i+=1
data_a[i-1][1]=0
print(data_a)
# data_a = [[1, -1, 1], [2, 0, 2], [3, 1, 3], [4, 2, 0]]
i = 0
k=input('输入K:')
k = int(k)
l = len(data_a)
print(data_a)
while l:
j = 1
while j < k:
j += 1
i = data_a[i][1] # next的index
print(data_a[i][0])
data_a[data_a[i][2]][1] = data_a[i][1] # pre的next->原的next
data_a[data_a[i][1]][2] = data_a[i][2] # next的pre->原的pre
i = data_a[i][1]
l -= 1
3
链表的创建
#链表的创建
item=[]
head=-1
#head值为-1,代表指针指向为空,该列表是空列表
链表的尾部插入
#尾部插入链表
import random
data_a=[]
head_a=-1
tmp=random.randint(95,100)
data_a.append([tmp,head_a])
head_a=0
for i in range(1,20):
tmp=data_a[i-1][0]-random.randint(1,5)
data_a.append([tmp,data_a[i-1][1]])
data_a[i-1][1]=i
print(data_a)
#链表的中间插入
#链表的中间插入
import random
data_a=[]
head_a=-1
tmp=random.randint(95,100)
data_a.append([tmp,head_a])
head_a=0
print("链表一")
print(data_a)
for i in range(1,20):
tmp=data_a[i-1][0]-random.randint(1,5)
data_a.append([tmp,data_a[i-1][1]])
data_a[i-1][1]=i
data_a.append([1,20])
data_a[0][1]=20
data_a[20][1]=1
双链表的创建和尾插
from random import randint
data_a=[]
head_a=-1
tmp=randint(95,100)
data_a.append([tmp,head_a,head_a])
head_a=0
for i in range(1,5):
tmp=data_a[i-1][0]-randint(1,5)
data_a.append([tmp,data_a[i-1][1],i-1])
data_a[i-1][1]=i
print("链表一:")
print(data_a)
有序链表的合并
#有序链表的合并
from random import randint
data_a=[]
head_a=-1
data_b=[]
head_b=-1
#生成链表1
tmp=randint(95,100)
data_a.append([tmp,head_a])
head_a=0
for i in range (1,5):
tmp=data_a[i-1][0]-randint(1,5)
data_a.append([tmp,data_a[i-1][1]])
data_a[i-1][1]=i
print ("序列1")
print (data_a)
#生成链表2
tmp=randint(95,100)
data_b.append([tmp,head_b])
head_b=0
for i in range (1,5):
tmp=data_b[i-1][0]-randint(1,5)
data_b.append([tmp,data_b[i-1][1]])
data_b[i-1][1]=i
print ("序列2")
print (data_b)
k_a=head_a
q_a=head_a#前驱节点
k_b=head_b
while(k_a!=-1 and k_b!=-1):
if data_a[k_a][0]>=data_b[k_b][0]:#data_a中的数据大
q_a=k_a
k_a=data_a[k_a][1]#指针前进
else:#data_b 中的数据大
if k_a==head_a:#需要修改头节点
data_a.append([data_b[k_b][0],head_a])
head_a=len(data_a)-1#修改头节点
q_a=head_a
k_b=data_b[k_b][1]
else:#中间位置,不需要修改头节点
data_a.append([data_b[k_b][0],k_a])
data_a[q_a][1]=len(data_a)-1
q_a=data_a[q_a][1]
k_b=data_b[k_b][1]
while k_b!=-1:#data_b 中有剩余元素
data_a.append([data_b[k_b][0],-1])
data_a[q_a][1]=len(data_a)-1
q_a=data_a[q_a][1]
k_b=data_b[k_b][1]
print ("新序列:")
print (data_a)
print ("链表顺序")
tmp=head_a
while data_a[tmp][1]!=-1:
print (data_a[tmp][0],end=" ")
tmp=data_a[tmp][1]
print(data_a[tmp][0])
有序链表的去重
from random import randint
data_a=[]
head_a=-1
#生成链表1
tmp=randint(95,100)
data_a.append([tmp,head_a])
head_a=0
for i in range (1,20):
tmp=data_a[i-1][0]-randint(0,2)
data_a.append([tmp,data_a[i-1][1]])
data_a[i-1][1]=i
print ("序列1")
print (data_a)
tmp_a=0
k_a = data_a[tmp_a][1]
# q_a=head_a
while(k_a!=-1):
#
k_a = data_a[tmp_a][1]
#
tmp1=data_a[tmp_a][0]
k=data_a[k_a][0]
#
if k==tmp1:
data_a[tmp_a][1]=data_a[k_a][1]
else:
tmp_a=data_a[tmp_a][1]
#
print("链表顺序")
t=head_a
while data_a[t][1]!=-1:
print (data_a[t][0],end=" ")
t=data_a[t][1]
print(data_a[t][0])