数据结构(二)——单向有头链表基本操作和复杂操作

1.段错误调试方法:
    1.按照网上的方法配置Ubuntu,允许生成core文件
    2.重新编译代码并加入-g选项(允许进行GDB调试)
    3.ulimit -c unlimited 
      不限制core文件的生成的大小
    4.执行代码,复现段错误,产生包含出错信息的core文件(检查core文件是否生成)
    5.gdb a.out core 
      查看段错误产生的位置
      bt 
      查看段错误时的堆栈信息
      p 变量名 
      查看段错误时的变量信息

2.vscode的调试方法


3.单向链表操作:
    基本操作:
    1.创建
    2.销毁
    3.插入 
    4.删除
    5.打印
    6.修改
    7.查询

    复杂操作:
    1.查找链表中间节点

          快慢指针法:使用两个指针,一个快指针每次移动两个节点,一个慢指针每次移动一个节点。当快指针到达链表末尾时,慢指针所指的位置即为链表的中间节点。


    2.查找链表倒数第k个节点

        快慢指针法:先使用快慢指针找到链表的长度,然后使用快慢指针找到倒数第k个节点。
    3.链表的倒置(反转)

  1. 遍历链表,创建一个新链表,用于存储倒置后的节点。
  2. 在遍历过程中,将每个节点从原链表中摘除,并添加到新链表的头部。
  3. 最后,新链表即为倒置后的链表。


    4.链表的排序(冒泡排序、选择排序

        冒泡排序:比较相邻节点的值,如果顺序错误就交换它们的位置,重复此过程直到链表有序。

       选择排序:遍历链表,找到最小(或最大)的节点,将其与链表的第一个节点交换,然后重复此过程,但每次都是从剩余未排序的节点中找到最小(或最大)的节点。

    5.已知链表中间某个节点地址,不知道头结点地址,如何删除该节点(移花接木)
    6.如何判断一个链表是否有环?环长?环的入口位置?
        是否有环:快指针每次走2步,慢指针每次走1步,快慢指针相遇则说明有环
        如何计算环长:标记相遇的位置,让指针继续向后走,没走一步计算器自加,走回到标记位置,则计算器值即为环长
        如何计算环入口位置:将一个指针从第一个节点向后走,将一个指针从相遇点向后走,两个指针相遇的位置即为环入口的位置
    

你可能感兴趣的:(数据结构,链表)