Example #1
0
    def _pre_ergodic(self, node: Node, que: SingleLinkList):
        if node is None:
            return None

        que.append(node)
        if node.left is not None:
            self._pre_ergodic(node.left, que)
        if node.right is not None:
            self._pre_ergodic(node.right, que)
Example #2
0
    def reserve_by_head_add(s_link):
        '''反转单链表,通过建立新的链表,使用头插的方式'''

        if s_link.is_empty():
            return s_link

        new_link = SingleLinkList()

        cur = s_link._head
        while cur is not None:
            new_link.add(cur.item)
            cur = cur.next

        return new_link
Example #3
0
    def reserve_by_3_pointer(s_link):
        '''利用三个指针p0"前指针"、p1“当前指针”、p2"后指针"来分批处理链表元素。
        p0置为NULL,它将作为链表的尾结点向前推进处理,
        p1指向旧链表的头指针head,
        p2指向旧链表的头指针的next结点。
        '''
        p0 = None
        p1 = s_link._head

        if p1 is None or p1.next is None:
            return s_link
        p2 = p1.next
        while p1 is not None:

            # temp_pointer = p1
            p1.next = p0
            # p0作为头结点,指向旧链表中的第一个节点
            p0 = p1

            # p1指向p1.next
            p1 = p2
            # p1.next = p2
            # p2不为None,说明p2不是尾节点
            if p2 is not None:
                p2 = p2.next

        return SingleLinkList(p0)
Example #4
0
 def suf_ergodic(self):
     '''后序遍历:先遍历左子树,再遍历右子树,再根节点'''
     keys = SingleLinkList()
     self._suf_ergodic(self.root, keys)
     return keys
Example #5
0
 def mid_ergodic(self):
     '''中序遍历:先遍历左子树,再遍历根节点,再右子树'''
     keys = SingleLinkList()
     self._mid_ergodic(self.root, keys)
     return keys
Example #6
0
from linear.singlelinklist import SingleNode, SingleLinkList
from linear.cyclelinkcheck import CycleLinkCheck

a = SingleNode('a')
b = SingleNode('b')
c = SingleNode('c')
d = SingleNode('d')
e = SingleNode('e')
f = SingleNode('f')

a.next = b
b.next = c
c.next = d
d.next = e
e.next = f
f.next = a

s_link = SingleLinkList(a)
# s_link.travel()
# print('-' * 10)

print(CycleLinkCheck.is_cycle(s_link))
h = CycleLinkCheck.get_entrance(s_link)
# print(h)
# print(b)
print(h.item)
Example #7
0
from linear.singlelinklist import SingleLinkList
from linear.reserve_single_link_list import ReserveSingleLinkList

ll = SingleLinkList()
ll.add(1)
ll.insert(0, 2)
ll.insert(1, 3)
ll.travel()
# print(ll.length())
print('*' * 10)

# b = ReserveSingleLinkList.reserve_by_head_add(ll)
b = ReserveSingleLinkList.reserve_by_3_pointer(ll)
b.travel()
# print(b.item)
# print(b.next.item)
# print(b.next.next.item)