多项式加法(链表)

【题目链接】

http://dsalgo.openjudge.cn/linearlists/1/

【代码】

#include <iostream>
using namespace std;

struct node{
    int n, p;
    node* nxt;
};

class LinkList{
    node* head;
public:
    LinkList(){
        head = new node;
        head->nxt = NULL;
    }
    ~LinkList(){
        node* p = head;
        while(p->nxt != NULL){
            node* tmp = p;
            p = p->nxt;
            delete tmp;
        }
    }
    void Insert(int n, int pp){
        node* p = head;
        while(p->nxt != NULL && p->nxt->p > pp) p = p->nxt;
        if(p->nxt == NULL || p->nxt->p != pp){
            // 在p后插入节点
            node* nw = new node({n, pp, p->nxt});
            p->nxt = nw;
        }
        else{
            p->nxt->n += n;
        }
    }
    void print(){
        node* p = head;
        while(p->nxt != NULL){
            p = p->nxt;
            if(p->n != 0){
                printf("[ %d %d ]", p->n, p->p);
                if(p->nxt != NULL) printf(" ");
            }
        }
    }
};

int main(){
    int T;
    cin >> T;
    while(T--){
        LinkList l;
        int a, b;
        while(cin >> a >> b && (b >= 0)) l.Insert(a, b);
        while(cin >> a >> b && (b >= 0)) l.Insert(a, b);
        l.print();
        printf("\n");
    }
    system("pause");
    return 0;
}

【分析】

这题出的,输入的简直不是多项式……注意一个多项式可能没有经过化简,也就是说,幂次可以重复,系数可以为0

考察的主要是链表

当然也可以用set,理论上更快一些

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元多项式加法链表可以通过线性链表来实现。每个节点表示多项式的一项,包含系数和指数两个属性。链表的头节点指向第一项,每个节点的next指针指向下一项。 以下是一元多项式加法链表的实现步骤: 1. 定义一个节点类,包含系数和指数两个属性。 2. 创建一个空链表,即头节点为空。 3. 依次输入多项式的系数和指数,创建节点,并将节点插入链表中。 4. 重复步骤3,直到输入完所有的项。 5. 对两个多项式链表进行加法运算,将结果存储在一个新的链表中。 - 遍历两个链表,比较当前节点的指数大小。 - 如果指数相等,将两个节点的系数相加,并创建一个新节点插入结果链表中。 - 如果一个链表的指数较小,将该节点插入结果链表中,并继续遍历较大指数的链表。 - 如果一个链表已经遍历完,将另一个链表剩余的节点插入结果链表中。 6. 输出结果链表的每一项。 以下是一个示例代码,演示了一元多项式加法链表的实现: ```python class Node: def __init__(self, coefficient, exponent): self.coefficient = coefficient self.exponent = exponent self.next = None def create_polynomial(): head = Node(0, 0) # 创建头节点 current = head while True: coefficient = input("请输入多项式的系数(输入0结束):") if coefficient == '0': break exponent = input("请输入多项式的指数:") node = Node(int(coefficient), int(exponent)) current.next = node current = current.next return head def add_polynomials(p1, p2): result_head = Node(0, 0) # 创建结果链表的头节点 current = result_head p1 = p1.next p2 = p2.next while p1 and p2: if p1.exponent == p2.exponent: coefficient = p1.coefficient + p2.coefficient exponent = p1.exponent p1 = p1.next p2 = p2.next elif p1.exponent < p2.exponent: coefficient = p1.coefficient exponent = p1.exponent p1 = p1.next else: coefficient = p2.coefficient exponent = p2.exponent p2 = p2.next node = Node(coefficient, exponent) current.next = node current = current.next while p1: node = Node(p1.coefficient, p1.exponent) current.next = node current = current.next p1 = p1.next while p2: node = Node(p2.coefficient, p2.exponent) current.next = node current = current.next p2 = p2.next return result_head # 创建多项式链表 p1 = create_polynomial() p2 = create_polynomial() # 计算多项式链表的和 result = add_polynomials(p1, p2) # 输出结果链表的每一项 current = result.next while current: print(f"系数:{current.coefficient},指数:{current.exponent}") current = current.next ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值