1.段错误调试方法:
1.按照网上的方法配置Ubuntu,允许生成core文件
2.重新编译代码并加入-g选项(允许进行GDB调试)
3.ulimit -c unlimited
不限制core文件的生成的大小
4.执行代码,复现段错误,产生包含出错信息的core文件(检查core文件是否生成)
5.gdb a.out core
查看段错误产生的位置
bt
查看段错误时的堆栈信息
p 变量名
查看段错误时的变量信息
2..单向链表操作:
简单操作:
增删改查
复杂操作:
1.查找链表中间节点
快指针走两步,慢指针走一步,快到结尾,慢是中间结尾。
2.查找链表倒数第k个节点
快先走k步,然后快慢同步,快到结尾,慢是倒数第k个。
3.链表的倒置(反转)
断开头的后面,把后面重新头插,实现倒置
4.链表的排序(冒泡排序、选择排序)
冒泡,定义俩节点指针1,2初始化,一个标记指针=NULL,1,2的值比较,大的向后,当2=标记节点指针,则结束本次循环,令标记指针=1指针,1,2复位再重复,当标记指针=头节点的后第二节点指针则冒泡结束
选择:最小值指针,交换指针,行走指针,行走指针比最小指针值小,则最小指针指向行走指针此时位置,遍历完后,对比交换指针和最小指针,需要交换数据则交换,重复
5.已知链表中间某个节点地址,不知道头结点地址,如何删除该节点
将此节点后一个值覆盖这一个,删去后一个节点。
6.如何判断一个链表是否有环?环长?环的入口位置?
是否有环:快指针每次走2步,慢指针每次走1步,快慢指针相遇则说明有环
如何计算环长:标记相遇的位置,让指针继续向后走,没走一步计算器自加,走回到标记位置,则计算器值即为环长
如何计算环入口位置:将一个指针从第一个节点向后走,将一个指针从相遇点向后走,两个指针相遇的位置即为环入口的位置