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
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
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)
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)
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))
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))
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))
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))