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))
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)
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)
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)
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)
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) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 '''
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)