【小结】剑指Offer算法链表总结:方法总结,题解总结。

【链表】:JZ3 从尾到头打印链表

【链表】:JZ56 删除链表中重复的结点

【链表】:JZ14 链表中倒数最后k个结点

【链表】:JZ55 链表中环的入口结点,2种解法

【链表】:JZ15 反转链表

【链表】:JZ16 合并两个排序的链表 ,2种方法

【链表】:JZ36 两个链表的第一个公共结点

【链表】:剑指 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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值