设计算法用链表实现两个多项式相加。
时间: 2024-09-24 19:02:24 浏览: 38
算法设计:使用链表来实现两个多项式的相加,首先我们需要定义一个节点结构,每个节点包含一个系数和一个指向下一个节点的指针。步骤如下:
1. 定义一个`Node`类,表示链表中的一个元素,包括一个整数值`coeff`表示系数,以及一个指向下一个`Node`的引用`next`。
```python
class Node:
def __init__(self, coeff=0, next=None):
self.coeff = coeff
self.next = next
```
2. 创建两个表示多项式链表的头结点`head1`和`head2`。
3. 遍历两个链表,将对应位置的系数相加。可以设置一个临时链表`result_head`作为结果的头部,初始为空。
4. 使用两个指针`p1`, `p2`分别指向`head1`和`head2`,并初始化累加和`sum`。
5. 当任一链表未遍历完时,执行以下操作:
a. 如果当前节点都不为`None`,取两节点的系数相加,然后创建一个新的`Node`并将结果存储在`sum`中,同时更新`result_head`(如果之前没有其他项)或者连接到现有结果的末尾。
b. 然后移动相应的指针,如`p1 = p1.next`或`p2 = p2.next`。
6. 如果其中一个链表已遍历完而另一个还有剩余项,将剩余项添加到结果链表的末尾。
7. 最后,返回结果链表的头结点`result_head`。
```python
def add_polynomials(head1, head2):
result_head = None
p1, p2 = head1, head2
sum_node = Node(0) # 初始化一个临时节点用于计算和
while p1 is not None or p2 is not None:
if p1 is not None and p2 is not None:
current_sum = p1.coeff + p2.coeff
new_node = Node(current_sum)
if result_head is None:
result_head = new_node
else:
last_node.next = new_node
p1 = p1.next
p2 = p2.next
elif p1 is not None:
current_sum = p1.coeff
new_node = Node(current_sum)
if result_head is None:
result_head = new_node
else:
last_node.next = new_node
p1 = p1.next
else:
current_sum = p2.coeff
new_node = Node(current_sum)
if result_head is None:
result_head = new_node
else:
last_node.next = new_node
p2 = p2.next
return result_head
```
阅读全文