CC_2_链表

2-1 移除未排序链表中的重复结点。不使用临时缓冲区怎么处理

HashMap,时间复杂度O(n),空间复杂度O(n)

不使用缓冲区,两次循环,时间O(n^2),空间O(1)

2-2 找到单链表的倒数第k个结点

two pointers

2-3 删除单链表中的某个结点,只能访问该结点

复制后一结点到待删除结点,时间复杂度O(1)

2-4 给定x,把链表分为两部分,小于x的放在大于等于x的前面

遍历原始链表,临时创建符合题意的两个链表,再合并两个新链表,优化,建立链表从tail至head建立

2-5 给定两个用链表表示的整数,每个节点一位数,反向存放,求和并返回一个链表。正向存放呢?

反向,求和&进位,recursion 注意不同长度的情况

正向,recursion返回进位&结果,用零将两个链表的长度补全

           也可以辅助栈,或者先反向链表,转换为第一种情况

2-6 给定一个有环链表,返回环路开头的结点START_LOOP

1、检测链表是否有环,fast_slow_pointers

2、指针CollisionSpot:假设非环路的长度为k,slow走k步到达START_LOOP,fast走2k距离START_LOOP为LOOP-k,即落后slow步数为LOOP-k,再经过LOOP-k步后slow与fast相遇,相遇处称CollisionSpot

3、CollisionSpot与LinkedListHead距离START_LOOP距离都为k,用两个指针分别从两个位置同速度的走,相遇处即是START_LOOP

2-7 检测链表是否为回文

1、反转链表+比较

2、前半链表入栈,弹栈并遍历后半链表

3、Recursion,链表操作比数组复杂

你可能感兴趣的:(Cracking,the,Coding,Interview,Cracking,the,Coding,程序员应聘)