Ejemplo n.º 1
0
 def reverseList1(self, head: ListNode) -> ListNode:
     if not head:
         return []
     l = []
     while head:
         l.append(head)
         head = head.next
     root = l.pop()
     head = root
     while l:
         head.next = l.pop()
         head = head.next
     head.next = None
     return root
Ejemplo n.º 2
0
 def insertionSortList1(self, head: ListNode) -> ListNode:
     if not head:
         return head
     cur, nxt = head, head.next
     dummy = ListNode(float('-inf'))
     dummy.next = head
     while nxt:
         if nxt.val >= cur.val:
             cur, nxt = nxt, nxt.next
         else:
             cur.next = nxt.next
             pre1, pre2 = dummy, dummy.next
             while nxt.val > pre2.val:
                 pre1, pre2 = pre2, pre2.next
             pre1.next = nxt
             nxt.next = pre2
             nxt = cur.next
     return dummy.next
Ejemplo n.º 3
0
    def partition(self, head: ListNode, x: int) -> ListNode:
        """
        分成左中右
        """
        sh = None
        st = None
        bh = None
        bt = None
        eh = None
        et = None
        while head:
            next = head.next
            head.next = None
            if head.val < x:
                if not sh:
                    sh = head
                    st = head
                else:
                    st.next = head
                    st = head
            elif head.val == x:
                if not eh:
                    eh = head
                    et = head
                else:
                    et.next = head
                    et = head
            else:
                if not bh:
                    bh = head
                    bt = head
                else:
                    bt.next = head
                    bt = head
            head = next

        if st:
            st.next = eh
            et = st if not et else et  # 谁连大于区域的头谁变成et
        if et:
            et.next = bh
        return sh if sh else (eh if eh else bh)
Ejemplo n.º 4
0
        while head:
            l.append(head)
            head = head.next
        root = l.pop()
        head = root
        while l:
            head.next = l.pop()
            head = head.next
        head.next = None
        return root

    def reverseList(self, head: ListNode) -> ListNode:
        if not head:
            return []
        pre = None
        cur = head
        while cur:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre


if __name__ == "__main__":
    a = Solution()
    l = ListNode([1, 2, 3, 4, 5])
    # q = a.reverseList(l)
    print(l)
    # print(q)
Ejemplo n.º 5
0
from 链表类 import ListNode
from 反转链表 import Solution as S


class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        if not head:
            return True
        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        # 出循环时fast是最后一个节点,slow是中间节点或前半段的最后一个节点
        fast = S().reverseList(slow)
        slow = head
        # print("slow",slow)
        # print("fast",fast)
        while fast:
            if slow.val != fast.val:
                return False
            slow, fast = slow.next, fast.next
        return True


if __name__ == "__main__":
    a = Solution()
    t = ListNode.list2ListNode([1, 2, 3, 3, 2, 1])
    print(t)
    print(a.isPalindrome(t))
Ejemplo n.º 6
0
            elif head.val >= x:
                if not eh:
                    eh = head
                    et = head
                else:    
                    et.next = head
                    et = head
            else:
                if not bh:
                    bh = head
                    bt = head
                else:
                    bt.next = head
                    bt = head
            head = next

        if st:
            st.next = eh
            et = st if not et else et # 谁连大于区域的头谁变成et
        if et:
            et.next = bh
        return sh if sh else (eh if eh else bh) 
            


        

if __name__ == "__main__":
    a = Solution()
    l = ListNode.list2ListNode([1,4,3,2,5,2])
    print(a.partition(l, 3))
Ejemplo n.º 7
0
                    break
            p1 = p1.next
            length += 1
        return head

    def insertionSortList1(self, head: ListNode) -> ListNode:
        if not head:
            return head
        cur, nxt = head, head.next
        dummy = ListNode(float('-inf'))
        dummy.next = head
        while nxt:
            if nxt.val >= cur.val:
                cur, nxt = nxt, nxt.next
            else:
                cur.next = nxt.next
                pre1, pre2 = dummy, dummy.next
                while nxt.val > pre2.val:
                    pre1, pre2 = pre2, pre2.next
                pre1.next = nxt
                nxt.next = pre2
                nxt = cur.next
        return dummy.next


if __name__ == "__main__":
    a = Solution()
    l = ListNode([4, 2, 1, 3])
    print(l)
    print(a.insertionSortList(l))
Ejemplo n.º 8
0
from 链表类 import ListNode


class Solution:
    def getDecimalValue(self, head: ListNode) -> int:
        ret = 0
        if not head:
            return []
        while head:
            if head.val == 0:
                head = head.next
            else:
                break
        while head:
            ret = ret << 1
            ret += head.val
            head = head.next
        return ret


if __name__ == "__main__":
    a = Solution()
    l = ListNode([1, 0, 1])
    print(a.getDecimalValue(l))