leetcode刷题记录(四)

链表


237.Delete Node in a Linked List

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

1
2
3
4
5
6
7
8
class Solution(object):
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val = node.next.val
node.next = node.next.next

725.Split Linked List in Parts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def splitListToParts(self, root, k):
"""
:type root: ListNode
:type k: int
:rtype: List[ListNode]
"""
curr, length = root, 0
while curr:
curr, length = curr.next, length + 1
chunk, longer = length//k, length%k
res = [chunk + 1]*longer + [chunk]*(k-longer)

prev, curr = None, root
for index, num in enumerate(res):
if prev:
prev.next = None
res[index] = curr
for i in range(num):
prev, curr = curr, curr.next
return res

分三步:求长度,切块,把数据装进去

206.Reverse Linked List

迭代
不太懂id……

1
2
3
4
5
6
7
8
def reverseList(self, head):
prev = None
while head:
curr = head
head = head.next
curr.next = prev
prev = curr
return prev

递归

1
2
3
4
5
6
7
8
9
def reverseList(self, head):
return self._reverse(head)

def _reverse(self, node, prev=None):
if not node:
return prev
n = node.next
node.next = prev
return self._reverse(n, node)

445.Add Two Numbers II

You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if not l1:
return l2
if not l2:
return l1
x1 = x2 = ''
while l1:
x1 += str(l1.val)
l1 = l1.next
while l2:
x2 += str(l2.val)
l2 = l2.next
y = int(x1)+int(x2)
y = str(y)
head = next_node = ListNode(y[0])
for i in range(1, len(y)):
next_node.next = ListNode(y[i])
next_node = next_node.next
return head

328.Odd Even Linked List

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def oddEvenList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
d1=odd=ListNode(0)
d2=even=ListNode(0)
i=1
while head:
if i%2:
odd.next,odd=head,head
else:
even.next,even=head,head
head=head.next
i+=1
odd.next,even.next=d2.next,None
return d1.next

放五一了啦啦啦