链表___

遍历

/*基本的单链表节点*/
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)
}

难点:

  1. 链表相关问题的难度在于不用额外空间的方法和coding的能力
  2. 注意头结点、尾结点、下一个节点、下下个节点是否为空节点

解题辅助

  1. dummy节点
  2. 哈希表
  3. 数组
  4. 双指针

经典例题

反转链表

k个一组反转链表

链表复制

回文链表

其他

节点的拷贝

先完成另外一个节点的拷贝(相当于删除了本节点),再删除被拷贝的结点,变相的完成节点删除操作。存在的问题:问题1,如果被拷贝结节不仅仅是个数字,而是个服务器,那么所有连接它的访问将会全部失效,这就会造成重大问题或。问题2,被拷贝节点无法访问其构造方法或者初始化方法或是其他内容,那是无法完成完全拷贝的。

Map管理多段链表

将各个链表的头尾结点分别放在头Map和尾Map中,这样就可以通过这两个Map管理这多段链表,可以仅通过头尾指针就快速处理这多段链表之间的关系,例如链表的组合。

猜你喜欢

转载自blog.csdn.net/qq_31941921/article/details/121718372