lc2 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
temp_sum计算每一位,flag计算进位,注意进位的处理。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1:
return l2
if not l2:
return l1
res = ListNode(0)
temp = res
flag = 0
while l1 or l2:
temp_sum = 0
if l1:
temp_sum += l1.val
l1 = l1.next
if l2:
temp_sum += l2.val
l2 = l2.next
temp_res = (temp_sum+flag) % 10
flag = (temp_sum+flag) // 10
res.next = ListNode(temp_res)
res = res.next
if flag:
res.next = ListNode(1)
return temp.nextlc19 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
双指针的next指向head,第一个指针先向后移动n个位置,然后两个指针同时移动直到第一个指针移动到链表末端,此时第二个指针指向倒数第n+1个数,删除第二个指针的next节点即可。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
res = ListNode(0)
res.next = head
p, q = res, res
for _ in range(n):
q = q.next
while q.next:
q = q.next
p = p.next
p.next = p.next.next
return res.next