1 反转链表(一)
反转一个单链表
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
prev_node = None
curr_node = head
while curr_node:
next_node = curr_node.next # Remember next node
curr_node.next = prev_node # REVERSE! None, first time round.
prev_node = curr_node # Used in the next iteration.
curr_node = next_node # Move to next node.
head = prev_node
return head
2 反转链表(二)
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
# 1(pre) 4 (reverse)->3->2 5(cur)
class Solution(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""
if m==n:
return head
dummyNode = ListNode(0)
dummyNode.next = head
pre = dummyNode
for i in range(m-1):
pre = pre.next
cur = pre.next
reverse = None
for i in range(n-m+1):
next = cur.next
cur.next = reverse
reverse = cur
cur = next
pre.next.next = cur
pre.next = reverse
return dummyNode.next
3 链表的中间节点问题
class Solution(object):
def middleNode(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
fast = slow = head
while fast and fast.next:
fast = fast.next.next
slow = slow.next
return slow
class Solution(object):
def middleNode(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
A = [head]
while A[-1].next:
A.append(A[-1].next)
return A[len(A) / 2]
4 两数相加(一)
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
dummy = cur = ListNode(0)
carry = 0
while l1 or l2 or carry:
if l1:
carry += l1.val
l1 = l1.next
if l2:
carry += l2.val
l2 = l2.next
cur.next = ListNode(carry % 10) # 个位
cur = cur.next
carry //= 10
return dummy.next
5 两数相加(二)
6 版本号问题 165
class Solution:
def compareVersion(self, version1, version2):
"""
:type version1: str
:type version2: str
:rtype: int
"""
versions1 = [int(v) for v in version1.split(".")]
versions2 = [int(v) for v in version2.split(".")]
for i in range (max(len(version1), len(version2))):
v1 = versions1[i] if i < len(versions1) else 0
v2 = versions2[i] if i < len(versions2) else 0
if v1 > v2:
return 1
elif v1 < v2:
return -1
else:
return 0