有一个带头结点的循环双链表L,其结点的data成员值为整数,设计一个算法判断其所有元素是否为对称。如果从前向后读和从后向前都得到的数据序列相同,表示为对称;否则不是对称。
class ListNode:
def __init__(self, data, next = None, pre=None):
self.data = data
self.next = next
self.pre = pre
def make_list(elements):
head = ListNode(elements[0])
tail = head
for element in elements[1:]:
ptr = head
while ptr.next:
ptr = ptr.next
cuurentNode=ListNode(element)
ptr.next = cuurentNode
cuurentNode.pre=ptr
tail = cuurentNode
tail.next=head
head.pre=tail
return head
class Solution(object):
def isPalindrome(self, head):
node1=head
node2=head.pre
while node1!=node2 and node1.next!=node2:
if node1.data!=node2.data:
return False
else:
node1=node1.next
node2=node2.pre
return True
ob1 = Solution()
print(ob1.isPalindrome(make_list([1])))
print(ob1.isPalindrome(make_list([1,2,3,3,1])))
print(ob1.isPalindrome(make_list([1,2,3,2,1])))
print(ob1.isPalindrome(make_list([1,2,3,3,2,1])))