序
链表系列题目很经典,因为涉及到两点
- 链表
- 内存地址
尤其是在当今高级语言越发隐藏底层的今天,链表操作中隐隐包含了对于地址空间到变量名的一种转换映射。当然,这也不可避免地会带来一定的理解复杂度。
题目系列
链表翻转
在递归
,利用栈
结构的解法上,再添加一种头插法
// 总体思路是通过对新的链表节点进行头插法插入,构造倒序链表
public ListNode reverseList(ListNode head) {
// 头插法的应用
// 用于头插法的节点
ListNode reverse = null;
// 旧链表头节点
ListNode curr = head;
// 旧链表从头到尾正序遍历,新链表使用头插法插入构造倒序
while(curr != null) {
ListNode next = curr.next;
// 旧链表的下一个节点换成新链表的头节点,即将当前节点作为新链表的头节点
curr.next = reverse;
// 更新新链表头节点为当前节点
reverse = curr;
// 遍历旧链表
curr = next;
}
// 返回新的头节点
return reverse;
}
k个一组翻转
Q.E.D.