线性表(spyder)

有一个带头结点的循环双链表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])))