遍历
/*基本的单链表节点*/
class ListNode {
int val;
ListNode next;
}
void traverse (ListNode head) {
for (ListNode p = head; p != null; p = p.next) {
//迭代访问p.val
}
void traverse(ListNode head) {
//递归访问head . val
traverse ( head . next)
}
难点:
- 链表相关问题的难度在于不用额外空间的方法和coding的能力
- 注意头结点、尾结点、下一个节点、下下个节点是否为空节点
解题辅助
- dummy节点
- 哈希表
- 数组
- 双指针
经典例题
反转链表
k个一组反转链表
链表复制
回文链表
其他
节点的拷贝
先完成另外一个节点的拷贝(相当于删除了本节点),再删除被拷贝的结点,变相的完成节点删除操作。存在的问题:问题1,如果被拷贝结节不仅仅是个数字,而是个服务器,那么所有连接它的访问将会全部失效,这就会造成重大问题或。问题2,被拷贝节点无法访问其构造方法或者初始化方法或是其他内容,那是无法完成完全拷贝的。
Map管理多段链表
将各个链表的头尾结点分别放在头Map和尾Map中,这样就可以通过这两个Map管理这多段链表,可以仅通过头尾指针就快速处理这多段链表之间的关系,例如链表的组合。