一、链表常用技巧与操作总结
技巧:
- 画图解题。
- 使用虚拟头结点。
- 像有插入类似操作时,直接定义变量,不用考虑节点丢失情况。
- 快慢指针。
操作:
- 创建新节点。
- 尾插。
- 头插。
二、2.两数相加
题目:2.两数相加
题目描述: 给你两个链表,每个链表都表示一个逆位的数,将两个数相加。相加后的结果不会出现链表最后节点为 0 的情况。
解题思路:
- 模拟两个数字相加即可。
- 遍历两个链表,对应节点值相加,放在一个变量 sum 中,结果链表就接上 sum%10 的节点,sum / 10 表示进位的数。
解题代码:
// 时间复杂度:O(n) 空间复杂度:O(1)
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode newHead = new ListNode(0); // 虚拟头结点
ListNode pre = newHead;
int sum = 0;
while (l1 != null || l2 != null || sum != 0) {
if (l1 != null) { sum += l1.val; l1 = l1.next; }
if (l2 != null) { sum += l2.val; l2 = l2.next; }
pre.next = new ListNode(sum % 10);
pre = pre.next;
sum /= 10;
}
return newHead.next;
}
}
三、24.两两交换链表中的节点
题目:24.两两交换链表中的节点
题目解析:


