网站制作工资流量精灵网页版
文章目录
- 链表常见技巧和操作总结
- 1. 常用技巧
- 2. 链表中的常用操作
- 题目链接:
- 题目描述:
- 解法
- C++ 算法代码:
链表常见技巧和操作总结
1. 常用技巧
- 画图 --> 直观,形象,便于理解
- 引入虚拟头节点
- 便于处理边界情况
- 方便我们对链表进行操作
- 不要吝啬空间,大胆去定义变量
- 快慢双指针
- 判断链表中是否有环
- 链表中环的入口
- 找链表中倒数第n个结点
2. 链表中的常用操作
- 创建一个新结点 new
- 尾插
- 头插
题目链接:
2. 两数相加
题目描述:
解法
模拟两数相加的原理即可。
C++ 算法代码:
/*** Definition for singly-linked list.* 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) {}* };*/
class Solution
{public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* cur1 = l1, *cur2 = l2; // 初始化两个指针分别指向两个链表的头节点ListNode* newhead = new ListNode(0); // 创建一个虚拟头结点,记录最终结果ListNode* prev = newhead; // 尾指针,用于构建结果链表int t = 0; // 记录进位// 循环直到两个链表都遍历完且没有进位while(cur1 || cur2 || t){// 先加上第一个链表的当前节点值if(cur1){t += cur1->val; // 累加当前节点的值cur1 = cur1->next; // 移动到下一个节点}// 加上第二个链表的当前节点值if(cur2){t += cur2->val; // 累加当前节点的值cur2 = cur2->next; // 移动到下一个节点}// 创建新节点,值为当前和的个位数prev->next = new ListNode(t % 10); // 取余数作为当前位的值prev = prev->next; // 移动尾指针t /= 10; // 计算进位值}// 保存结果链表的头节点(跳过虚拟头节点)prev = newhead->next;delete newhead; // 释放虚拟头节点的内存return prev; // 返回结果链表}
};