'''
请判断一个链表是否为回文链表
输入: 1->2->2->1 输出: True
'''import sys
classNode:'''
Node
'''def__init__(self, num,next):
self.data = num
self.next=nextdefcreate_linklist(numbers):'''
create link_list
:param numbers: list
:return: Head Node of link_list
'''
head = Node(0,None)
p = head
for num in numbers:
new_node = Node(num,None)
p.next= new_node
p = p.nextreturn head
numbers =list(map(int,input().split()))# input Link List
link_list = create_linklist(numbers)# get the length of link_list
length =0
p = link_list.nextwhile p !=None:
length +=1
p = p.next
stack =[]
queen =[]
stack_len = length//2
p = link_list.next
count =0while p !=None:
count +=1if count <= stack_len:# the left half of the link_list push to stack
stack.append(p.data)elif count == stack_len+1and(length%2==1):# if length of link_list is odd , the middle number of link_list should be passed
p = p.nextcontinueelse:# the right half of the link_list push to queen
queen.append(p.data)
p = p.next# pop stack and pop queen, respectively
flag =True
i =0
j =len(stack)-1while i <(length-stack_len)and j >=0:if queen[i]!= stack[j]:
flag =Falsebreak
i +=1
j -=1if flag:
sys.stdout.write("Yes")else:
sys.stdout.write("No")
'''
请判断一个链表是否为回文链表
输入: 1->2->2->1 输出: True
'''import sys
classNode:'''
Node
'''def__init__(self, num,next):
self.data = num
self.next=nextdefcreate_linklist(numbers):'''
create link_list
:param numbers: list
:return: Head Node of link_list
'''
head = Node(0,None)
p = head
for num in numbers:
new_node = Node(num,None)
p.next= new_node
p = p.nextreturn head
numbers =list(map(int,input().split()))# input Link List
link_list = create_linklist(numbers)
p = link_list # faster pointer
q = link_list # slower pointer
length_of_linkList =0while p!=Noneand p.next!=None:
q = q.next
p = p.next.next
length_of_linkList +=2if p ==None:# length of link_list is odd
length_of_linkList -=1
right_half_list = q.next# the first node of the right half link_list
q.next=None# reverse the right half link_list
head_of_reverse_list = right_half_list
p = right_half_list.next
head_of_reverse_list.next=Nonewhile p !=None:
temp = p.next
p.next= head_of_reverse_list
head_of_reverse_list = p
p = temp
# compare the left half and the reversed right half
i = link_list.next
j = head_of_reverse_list
flag =Truewhile i!=Noneand j!=None:if i.data != j.data:
flag =Falsebreak
i = i.next
j = j.nextif flag:
sys.stdout.write("Yes")else:
sys.stdout.write("No")