【链表】:JZ3 从尾到头打印链表
【链表】:剑指 Offer 35. 复杂链表的复制,2种方法
已经是二刷剑指Offer了,总体来说并不难。细节问题稍微多一些。
思路总结:
①从尾到头:一般看到这种字眼,我一般会想到栈Stack的使用,栈的泛型一般存储的是结点:Stack<ListNode>
注意:遍历栈的时候需要判空,while(!stack.isEmpty())
②去重的处理:如果一般不要求顺序的话,首先想到的是Set集合,通过方法set.contains方法进行判断。
③倒数第几个处理:使用两个指针,开始时,两个指针都指向链表开始结点,指针1指向当前结点,指针2往右走K步,假设是求倒数第K个结点。当指针2走过K步时,此时指针1,指针2 同时往右走,直到指针2到链表的最后一个结点。此时指针1指向的结点就是链表的倒数第K个结点。
④环形链表:可以看作是具有重复结点的链表,使用Set集合找出重复结点。
⑤反转链表:指针的后移动,指针方向的反转
⑥链表合并:也是对链表的遍历,比较值。记得判空
⑦复杂链表复制:哈希表的解法比较好。key对应原链表结点,value对应新链表结点
细节总结:(还有,后期补充,有点想不起来了 )
// 当前结点指针指向当前结点的下一个结点,相邻的结点 p = p.next; // 当前结点指向下一个结点 p.next = q; // 一般删除的时候用 p.next = w.next ; // 中间有个w结点的话 // p 指向head结点 p = head;