序
链表系列题目很经典,因为涉及到两点
- 链表
- 内存地址
尤其是在当今高级语言越发隐藏底层的今天,链表操作中隐隐包含了对于地址空间到变量名的一种转换映射。当然,这也不可避免地会带来一定的理解复杂度。
题目系列
链表翻转
在递归
,利用栈
结构的解法上,再添加一种头插法
// 总体思路是通过对新的链表节点进行头插法插入,构造倒序链表 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.