题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个链表,将其中两个为零的节点之间的节点合成一个节点,节点和为其值。

思路分享

  • 我的思路是单指针遍历节点,将遇到非零值纳入新链表;灵茶山艾府的方法是双指针,一个指针指第一个 0,另一个指针向后遍历,遇到的非零值加到第一个指针上,遇到零则更新第一个指针到第二个指针的位置,直接原地修改。

    https://leetcode.cn/problems/merge-nodes-in-between-zeros/

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 灵茶山
first = head
last = head.next
while last.next:
if last.val:
first.val += last.val
else:
first = first.next
first.val = 0
last = last.next
first.next = None
return head
# 自己的做法
last = head.next
num = 0
new_sentinal = ListNode(0, None)
new_cur = new_sentinal
while last.next != None:
num += last.val
last = last.next
if last.val == 0:
new_cur.next = ListNode(num, None)
new_cur = new_cur.next
num = 0
return new_sentinal.next