コード例 #1
0
ファイル: 234. 回文链表.py プロジェクト: zzf531/leetcode
from ListNode.List_node_Base import ListNode, generateList, printList


def isPalindrome(head):
    vals = []
    current_node = head
    while current_node:
        vals.append(current_node.val)
        current_node = current_node.next
    return vals == vals[::-1]


l1 = generateList([1, 2, 3, 3, 2, 1])
print(isPalindrome(l1))
コード例 #2
0
from ListNode.List_node_Base import ListNode, generateList, printList


class Solution(object):
    def mergeKLists(self, lists):
        nodes = []
        head = point = ListNode(0)
        for l in lists:
            while l:
                nodes.append(l.val)
                l = l.next
        for x in sorted(nodes):
            point.next = ListNode(x)
            point = point.next
        return head.next


if __name__ == '__main__':
    l1 = generateList([1, 4, 5])
    l2 = generateList([1, 3, 4])
    l3 = generateList([2, 6])
    m = Solution()
    merage = m.mergeKLists([l1, l2, l3])
    printList(merage)
コード例 #3
0
from ListNode.List_node_Base import ListNode, generateList, printList


class Solution:
    def mergeTwoLists(self, l1, l2):
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        elif l1.val < l2.val:
            l1.next = self.mergeTwoLists(l1.next, l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1, l2.next)
            return l2


l1 = generateList([1, 2, 4])
l2 = generateList([1, 3, 4])
a = Solution()
k = a.mergeTwoLists(l1, l2)
printList(k)
コード例 #4
0
from ListNode.List_node_Base import ListNode, generateList, printList


class Solution:
    def reverseList(self, head):
        new_head = None
        while head:
            tmp = head.next  # 备份原来head节点的next地址
            head.next = new_head
            new_head = head
            head = tmp
        return new_head


l1 = generateList([1, 3, 7])
a = Solution()
k = a.reverseList(l1)
printList(k)
コード例 #5
0
ファイル: 148. 排序链表.py プロジェクト: zzf531/leetcode
from ListNode.List_node_Base import ListNode, generateList, printList


class Solution:
    def sortList(self, head):  # 放入list排序,放回ListNode
        l = []
        p = head
        while p:
            l.append(p.val)
            p = p.next
        l.sort()
        p = head
        for e in l:
            p.val = e
            p = p.next
        return head


l1 = generateList([5, 1, 2, 5, 15, 34])
a = Solution()
k = a.sortList(l1)
printList(k)
コード例 #6
0
        while n:
            start = start.next
            n -= 1
        while start.next != None:
            start = start.next
            end = end.next
            print('+++', start.val, end.val)

        end.next = end.next.next
        print('___', start.val, end.val)
        return pre.next


if __name__ == '__main__':
    head = generateList([1, 2, 3, 4, 5, 6, 7])
    a = Solution()
    head2 = a.method1(head, 3)
    printList(head2)
'''
方法二: 使用双指针
由于头节点有可能被删除,故设置 pre 指针指向 head
设置快慢指针 前后指针 start, end, 指向 pre. 先让 end 走 n 步, 再将 start 和 end 一起移动.当 end.next 为 None时, 也就是 end 到了尾节点时, start 真好走到待删除节点的前一个节点.
此时 让 start.next = start.next.next, 即可删除 倒数第 n 个节点. 返回 pre.next 即可. 此处不返回 head 是因为 head 可能被删除.

作者:wd6
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-di-n-ge-jie-dian-pythonliang/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
'''
コード例 #7
0
    def addTwoNumbers(self, l1, l2):
        # 定义一个进位标志
        a, b, p, carry = l1, l2, None, 0
        while a or b:
            # a和b节点的值相加,如果有进位还要加上进位的值
            val = (a.val if a else 0) + (b.val if b else 0) + carry
            carry = 1 if val >= 10 else 0  # 根据val值判断,不是0,就是1
            val = val % 10  # 取val十位上的数
            p = a if a else b
            p.val = val
            # a和b指针都前进一位
            a, b = a.next if a else None, b.next if b else None
            p.next = a
            # 根据a和b是否为空,p指针也前进一位
        # 不要忘记最后的边界条件,如果循环结束carry>0说明有进位需要处理这个条件
        if carry:
            p.next = ListNode(1)

        # 每次迭代实际上都是将val赋给a指针的,所以最后返回的是l1
        return l1


if __name__ == "__main__":
    l1 = generateList([7, 7, 7, 0])
    l2 = generateList([6, 6, 6])
    printList(l1)
    printList(l2)
    s = Solution()
    sum = s.addTwoNumbers(l1, l2)
    printList(sum)