Пример #1
0
    def reverseKGroup(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """

        dummy = ListNode(0)
        dummy.next = head
        prev, node = dummy, head

        while node:
            src, dst = node, node
            i = 1
            while i < k and dst:
                dst = dst.next
                i += 1

            # print(i,k)
            if not dst:
                break

            next = dst.next
            sprev, s = None, src
            while s and id(s) != id(next):
                snext = s.next
                s.next = sprev
                sprev = s
                s = snext
            prev.next = dst
            src.next = next
            prev = src
            node = next

        return dummy.next
Пример #2
0
    def rotateRight(self,head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        # 边界条件未考虑
        if not head:
            return head
        n = head
        lens = 0
        while n:
            lens += 1
            n = n.next

        duumy = ListNode(0)
        duumy.next = head
        e = lens - (k % lens)
        if k % lens:
            s = 1
            n = head
            while s < e:
                n = n.next
                s += 1

            duumy.next = n.next
            end = n.next
            while end.next:
                end = end.next
            end.next = head
            n.next = None

        return duumy.next
    def mergeTwoLists(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        node1, node2 = l1, l2
        dummy = ListNode(0)
        prev = dummy
        while node1 and node2:
            if node1.val < node2.val:
                prev.next = node1
                prev = node1
                node1 = node1.next
            else:
                prev.next = node2
                prev = node2
                node2 = node2.next

        while node1:
            prev.next = node1
            prev = node1
            node1 = node1.next

        while node2:
            prev.next = node2
            prev = node2
            node2 = node2.next

        return dummy.next
Пример #4
0
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        dummy = ListNode(0)
        dummy.next = head
        prev, node = dummy, head

        while node and node.next:
            next = node.next
            node.next = next.next
            prev.next = next
            next.next = node
            prev = node
            node = node.next

        return dummy.next
Пример #5
0

class Solution:
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        dummy = ListNode(0)
        dummy.next = head
        prev, node = dummy, head

        while node and node.next:
            next = node.next
            node.next = next.next
            prev.next = next
            next.next = node
            prev = node
            node = node.next

        return dummy.next


if __name__ == "__main__":
    s = Solution()
    head1 = ListNode(1, ListNode(2, ListNode(3, ListNode(4))))
    n = s.swapPairs(head1)
    while n:
        print(n)
        n = n.next
Пример #6
0
from list.node import ListNode


class Solution:
    def isPalindrome(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        s = []
        n = head
        while n:
            s.append(n.val)
            n = n.next

        n = head
        while n:
            if s.pop() != n.val:
                return False
            n = n.next
        return True


if __name__ == "__main__":
    head = ListNode(1, ListNode(2, ListNode(1)))
    print(Solution().isPalindrome(head))
Пример #7
0
            while i < k and dst:
                dst = dst.next
                i += 1

            # print(i,k)
            if not dst:
                break

            next = dst.next
            sprev, s = None, src
            while s and id(s) != id(next):
                snext = s.next
                s.next = sprev
                sprev = s
                s = snext
            prev.next = dst
            src.next = next
            prev = src
            node = next

        return dummy.next


if __name__ == "__main__":
    s = Solution()
    head1 = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
    n = s.reverseKGroup(head1, 3)
    while n:
        print(n)
        n = n.next
Пример #8
0
                tail = tmp_for_tail
            tmp_for_tail = tmp_for_tail.next
            _len += 1

        # 找到新的 head
        new_head = head
        adv = _len - (k % _len)
        for i in range(adv):
            new_head = new_head.next
            if not new_head:  # 循环场景
                new_head = head

        # 找出 new_head 之前的点,并将其置为新的 tail
        tmp = head
        if tmp == new_head:
            return new_head
        while tmp:
            if tmp.next == new_head:
                tmp.next = None
                break
            tmp = tmp.next
        tail.next = head
        return new_head


if __name__ == '__main__':
    # head = ListNode.create(1, 2)
    # head = ListNode.create(1, 2, 3, 4, 5)
    head = ListNode.create(0, 1, 2)
    print(ListNode.toArray(Solution().rotateRight(head, 4)))
            if node1.val < node2.val:
                prev.next = node1
                prev = node1
                node1 = node1.next
            else:
                prev.next = node2
                prev = node2
                node2 = node2.next

        while node1:
            prev.next = node1
            prev = node1
            node1 = node1.next

        while node2:
            prev.next = node2
            prev = node2
            node2 = node2.next

        return dummy.next


if __name__ == "__main__":
    s = Solution()
    head1 = ListNode(2, ListNode(4))
    head2 = ListNode(4, ListNode(5, ListNode(6)))
    n = s.mergeTwoLists(head1, head2)
    while n:
        print(n)
        n = n.next