阶段复习
chao_smile 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
,这里的示例输出有误,但是代码逻辑是正确的,在题解中生成链表时直接用指针指向目标节点了,所以避免了错误输出,整体判断逻辑没有问题