链表详解:(后续会更新)
struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
1.遍历链表模板:
// 遍历链表
head while (head) {
// 从链表头节点开始向后遍历,直到遇到空节点
cout << head->val << endl; // 当前节点值
head = head->next; // 准备遍历下一个节点
}
力扣1290:迭代累加二进制转十进制
力扣2181:
class Solution {
public:
ListNode* mergeNodes(ListNode* head) {
ListNode* dum=new ListNode(0);//创建一个虚拟头节点
ListNode*ne=dum;
int sum=0;
head = head->next;
while(head!=nullptr){
if(head->val==0){
ne->next=new ListNode(sum);
ne=ne->next;
sum=0;
}else{
sum+=head->val;
}
head=head->next;
}
return dum->next;
}
};
力扣2058:
class Solution {
public:
vector<int> nodesBetweenCriticalPoints(ListNode* head) {
if (!head || !head->next || !head->next->next) {
return {-1, -1};
}
ListNode* dum=new ListNode(0);
vector<int> re; // 保留原变量名,现在用于存储位置
dum=head;
int pos = 2; // 新增位置计数器
while(dum->next->next!=nullptr){
// 保留原有的临界点判断条件
if(dum->val>dum->next->val&&dum->next->val<dum->next->next->val){
re.push_back(pos); // 存储位置而非值
}else if(dum->val<dum->next->val&&dum->next->val>dum->next->next->val){
re.push_back(pos); // 存储位置而非值
}
dum=dum->next;
pos++; // 位置递增
}
// 处理临界点数量不足的情况
if (re.size() < 2) {
return {-1, -1};
}
// 计算最小距离和最大距离
int minDist = INT_MAX;
for (int i = 1; i < re.size(); i++) {
minDist = min(mi