在一行上:
先输入一个整数
代表链表中节点的总数;
随后输入一个整数
代表头节点的值;
随后输入
个二元组
;
最后输入一个整数
,代表需要删除的节点值。
除此之外,保证每一个
值在输入前已经存在于链表中;每一个
值在输入前均不存在于链表中。节点的值各不相同。
在一行上输出
个整数,代表删除指定元素后剩余的链表。
5 2 3 2 4 3 5 2 1 4 3
2 5 4 1
在这个样例中,链表的构造过程如下:
头节点为
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
随后,删除值为
的节点,得到链表
。
6 2 1 2 3 2 5 1 4 5 7 2 2
7 3 1 5 4
在这个样例中,链表的构造过程如下:
头节点为
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
随后,删除值为
的节点,得到链表
。
本题由牛客重构过题面,您可能想要阅读原始题面,我们一并附于此处。
【以下为原始题面】
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
链表的值不能重复。
构造过程,例如输入一行数据为:6 2 1 2 3 2 5 1 4 5 7 2 2则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示:1 2 表示为2->1链表为2->13 2表示为2->3链表为2->3->15 1表示为1->5链表为2->3->1->54 5表示为5->4链表为2->3->1->5->47 2表示为2->7链表为2->7->3->1->5->4最后的链表的顺序为 2 7 3 1 5 4最后一个参数为2,表示要删掉节点为2的值删除 结点 2
则结果为 7 3 1 5 4数据范围:链表长度满足,节点中的值满足
测试用例保证输入合法
while True: try: str1=input().split() #空格区分 n = str1[0] #提取个数 start= str1[1]#提取初始 dele = str1[-1]#提取删除项 del str1[0] del str1[0] del str1[-1]#删除无用项 a=[start] #键入初始项 i=0 while i < (len(str1)-1): if str1[i+1] in a:#开始连接,每第i+1项为节点值,i项为插入值 index = a.index(str1[i+1])#查找其位置 a.insert(index+1, str1[i])#插入 i=i+2 if dele in a:#当存在时,删除 index = a.index(dele) del a[index] str2=' '.join(a) print(str2,end=" ")#记得打end = " " 此数据过长会省略 except: break
templist = input().split(' ')
numNodes = int(templist[0])
myls = [templist[1]]
for i in range(numNodes-1):
target, insert = templist[2+2*i], templist[3+2*i]
myls.insert(myls.index(insert)+1, target)
myls.remove(templist[-1])
for item in myls:
print(item, end=' ')
"""
[说明]:
1,本题的输入格式有问题,实际输入格式是将各元素在一行进行输入!!!
比如例子中的输入格式为:5 2 3 2 4 3 5 2 1 4 3
2,每组例子输出完成(在每个字符后都要加空格)后,还需要加上单独的一个换行!!!
3,题目中的->符号表示按照顺序插入
例如,2->1,2->3,2->7,表示先 2->1,然后 2->3->1,最后 2->7->3->1
4,其他的就和常规链表删除结点操作一样了,下面用数组进行处理。
"""
class Solution:
def fun(self, head, target, arr):
# 用来存储整个链表的最终表示(未删除前),例如,2->5->3->4->1
ans = [head]
for num in arr:
idx = ans.index(num[1]) # 找到当前结点在ans中的位置
ans.insert(idx+1, num[0]) # 再将当前结点的下一个结点插入到ans中的下一个位置
# 找到要删除结点的位置
tmp = ans.index(target)
# 删除目标结点
ans.pop(tmp)
return ans
if __name__ == '__main__':
while True:
try:
# 题目中的输入是将所以元素在同一行输入,同时中间用空格
tmp = list(map(int, input().split()))
# 结点总个数
n = tmp[0]
# 头结点
head = tmp[1]
# 需要删除的目标结点
target = tmp[-1]
# 将各结点的链接重新处理一下,例如,arr = [[3,2], [4,3], [5,2], [1, 4]]
tmp = tmp[2:len(tmp)-1]
arr = []
for i in range(len(tmp)//2):
arr.append([tmp[2*i], tmp[2*i+1]])
ans = Solution().fun(head, target, arr)
for i in range(len(ans)):
print(str(ans[i]), end=' ')
# 在每一个例子输出完后,还要加上一个换行!!!
print()
except:
break
while True:
try:
nums = list(map(int, input().split()))
nodes = [nums[1]]
for i in range(1, nums[0]):
v, pre = nums[2*i:2*i+2]
nodes.insert(nodes.index(pre)+1, v)
k = nums[-1]
nodes.remove(k)
print(" ".join(list(map(str, nodes)))+" ")
except:
break while True:
try:
s = input().split(' ')
ls = []
ls.append(s[1])
m = 2
for i in range(eval(s[0])-1):
a,b = s[m],s[m+1]
for j in range(len(ls)):
if a == ls[j]:
ls.insert(j+1,b)
break
if b == ls[j]:
ls.insert(j,a)
break
m += 2
ls.remove(s[-1])
ls.reverse()
print(' '.join(ls)+' ')
except:
break while 1:
try:
inputlist = input().split()
N, head, mylist = inputlist[0], inputlist[1], inputlist[2:]
newlist = []
newlist.append(head)
i = 0
while i<=len(mylist)-3:
m,n = mylist[i], mylist[i+1]
newlist.insert(newlist.index(n)+1,m)
i += 2
if mylist[-1] in newlist:
newlist.remove(mylist[-1])
mylist.index()
else:
pass
print(' '.join(newlist))
except:
break
................................
class Node(object):
def __init__(self,elem):
self.elem = elem
self.next = None
class SingleLinkList(object):
def __init__(self,node=None):
self._head = node
def length(self):
cur = self._head
count = 0
while cur:
cur = cur.next
count += 1
return count
def travel(self):
cur = self._head
while cur:
print(cur.elem, end = " ")
cur = cur.next
print("")
def add(self,item):
node = Node(item)
node.next = self._head
self._head = node
def insert(self,item,index):
node = Node(item)
if not self._head:
self._head = node
else:
cur = self._head
count = 0
while cur:
if cur.elem == index:
node.next = cur.next
cur.next = node
break
else:
cur = cur.next
def remove(self,item):
node = Node(item)
cur = self._head
pre = None
while cur:
if cur.elem == item:
if cur == self._head:
self._head = cur.next
else:
pre.next = cur.next
break
else:
pre = cur
cur = cur.next
while True:
try:
ll = SingleLinkList()
a = list(map(int,input().split()))
n = a[0]
ll.add(a[1])
for i in range(n-1):
c = a[2+i*2]
d = a[3+i*2]
ll.insert(c,d)
ll.remove(a[-1])
ll.travel()
except:
break /*只能说bug有点多,输出最后还要加空格,题目也没有说清楚,佛了佛了……*/
def result(head,arr,rem):
res = []
res.append(head)
for item in arr:
index = res.index(item[1])
res.insert(index+1,item[0])
res.remove(rem)
return res
while True:
try:
temp = list(map(int,input().split()))
n = temp[0]
head = temp[1]
rem = temp[-1]
arr = []
for i in range(2,len(temp)-1,2):
arr.append([temp[i],temp[i+1]])
ss = result(head,arr,rem)
res = list(map(str, ss))
print(" ".join(res)+' ')
except:
break
try:
while 1:
a = []
s = raw_input().split()
Node = int(s[0])
a.append(int(s[1]))
k = 2
for i in xrange(Node - 1):
m, n = int(s[k]), int(s[k + 1])
a.insert(a.index(n) + 1, m)
k += 2
a.remove(int(s[-1]))
for i in a[:-1]:
print i,
print a[-1],
print ''
except:
pass
def solution(lst, val):
if val in lst:
lst.remove(val)
return lst
return None
import sys
try:
while 1:
inp = sys.stdin.readline().strip('\n') # 输入只有一行,空格分隔
if not inp:
break
nums = map(int, inp.split())
# print 'n',nums[0],'head', nums[1], 'del_val', nums[-1]
lst = [nums[1]]
i = 2
while i < nums[0]*2:
target = nums[i+1]
idx = lst.index(target)
lst.insert(idx+1, nums[i])
i += 2
ret = solution(lst, nums[-1])
# print ret
for i in ret[:-1]:
print i,
print ret[-1],
print ''
except:
pass