基础算法——第五章总结

5-1 2 3
在链表中穿针引线
练习题206:reverse linked list 反转一个链表
思路:改变节点的next。一个指针cur指向当前节点,一个指针pre指向前一个节点,一个指针next指向下一个节点

练习题:92 只反转从m到n的元素
练习题83:一个有序的链表,删除重复的元素
练习题86:给出一个链表及一个数x,将链表重新整理,使小于x的元素在前,大于等于x的元素在后
练习题328
练习题2
练习题445

设立链表的虚拟头节点
练习题203:在链表中删除值为val的所有节点
对于删除的问题,增加一个新的虚拟头节点,可以考虑全部的链表节点,包括head。否则要考虑删除head的特殊情况,很复杂
练习题82
练习题21

5-456
练习题24:一个链表,每两个相邻的节点,交换位置
思路:设置四个节点


这里写图片描述

1.node2的next指向node1
2.node1.next指向next
3.p的next指向node2

这里写图片描述

4.将p指向node1
5.根据p和其他三个指针的相对位置重新寻找node1,node2,next
6.重复1-3步

练习题25

练习题147 为一个链表进行插入排序
练习题148 用O(nlogn)的算法对一个链表进行排序。(可以使用归并排序,自底向上)因为归并排序的index不会在数组之间不断跳动。

练习题237:给定链表中的一个节点,删除该节点
这个题的难点在于,我们拿不到当前节点的前一个节点。所以传统的删除节点的方法不能用。
思路:将当前节点的下一个节点的值,复制给当前节点,然后再删除下一个节点。

双指针技术
练习题19:给定一个链表,删除倒数第n个节点
思路一:先遍历一遍计算链表长度,再遍历一遍,删除第len-n个节点。
思路二:找出要删除节点的前一个节点。用p指向要删除的节点,q指向链表的末尾。则p和q之间的距离是固定的,并且为n。让p指向虚拟头节点,q指向n+1这个节点,让他们两个不停地移动,直到q指向null,此时的p指向的节点就是我们要找的待删除节点的前一个节点

练习题61
练习题143
练习题234 是否是回文链表

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值