阶段复习

2024/4/6

# 1. 多项式加法运算

假设有两个单链表,每个节点包含一个整型的系数常量和指数常量,每个节点表示多项式的一项。编写一个程序,实现两个多项式的加法运算。

多项式加法:

3x2 + 5x1 + 2x0 + 4x3 + 2x1 + 1x0 = 4x3 + 3x2 + 7x1 + 3x0

即相同指数的项相加(系数相加指数合并),不同指数的项直接连接。

链表节点定义如下:

struct PolynomialNode {
    int coefficient; // 系数
    int exponent;    // 指数
    PolynomialNode* next; // 指向下一个结点的指针
};

多项式加法示例:

PolynomialNode* addPolynomials(PolynomialNode* poly1, PolynomialNode* poly2);

示例输出:

多项式1: 3x^2 + 5x^1 + 2x^0
多项式2: 4x^3 + 2x^1 + 1x^0
多项式相加结果: 4x^3 + 3x^2 + 7x^1 + 3x^0
  • 历史解析
    • 整体题解思路正确,本题主要考查单链表的基本结构和操作,包括链表节点的定义、链表节点指针的移动、链表的遍历等,没有问题💯

# 2. 回文链表检测

给定一个单链表,判断它是否是一个回文链表,即链表从头到尾和从尾到头读取的值是一样的。

链表节点定义如下:

struct ListNode {
    int val;
    ListNode* next;
};

回文链表检测示例:

bool isPalindrome(ListNode* head);

示例输出:

链表: 1 -> 2 -> 3 -> 2 -> 1
是回文链表

链表: 1 -> 2 -> 3 -> 4 -> 5
不是回文链表
  • 历史解析
    • 整体题解思路正确,本题主要考查单链表的基本结构和操作,包括链表节点的定义、链表节点指针的移动、链表的遍历等,没有问题💯

# 3. 链表交叉点检测

给定两个单链表,判断它们是否相交,并返回相交的第一个节点。如果不相交,则返回 nullptr。

注意:两个链表相交的第一个节点, 意味着两个链表从这个节点开始后面的节点都是相同的。

链表节点定义如下:

struct ListNode {
    int val;
    ListNode* next;
};

链表交叉点检测示例:

ListNode* getIntersectionNode(ListNode* headA, ListNode* headB);

示例输出:

链表A: 4 -> 1 -> 8 -> 4 -> 5
链表B: 5 -> 0 -> 1 -> 8 -> 4 -> 5
两链表相交于节点: 8

链表A: 1 -> 2 -> 3
链表B: 4 -> 5 -> 6
两链表不相交
  • 历史解析
    • 整体题解思路正确,本题主要考查单链表的基本结构和操作,包括链表节点的定义、链表节点指针的移动、链表的遍历等,没有问题💯
    • 题目出了一些问题,就本题而言,相交节点应为 1 而不是 8,这里的示例输出有误,但是代码逻辑是正确的,在题解中生成链表时直接用指针指向目标节点了,所以避免了错误输出,整体判断逻辑没有问题
上次更新: 2024-10-19 10:01:51