zoukankan      html  css  js  c++  java
  • 数据结构 --- 单人名单

    在主题列表的脸,大部分的人(包含自己)他们是非常胆小,由于这是必然要面对的指针。

    今天,我意识到一些议题上的列表操作。

    首先,定义单链表中的节点:


    注:上述的删除链表函数是必须的。否则内存泄露将会是最大的问题。

    [updated]:上述删除链表的操作是有问题的,传入的參数必须是指针的指针或者是引用。或者返回head。由于须要将head指针置为空。这利用传值调用是办不到的。


    接下来。定义链表的一些操作:

    1 返回倒数第K个节点:

    //有待更新

    2 逆置链表;依次取出原链表中的元素,将其插入到新链表的头部.


    注意。在逆置单链表的过程中,我犯了一个错误,见上述代码凝视:

    3 推断链表是否是回文:


    当然,推断回文还有其它方法,只是我仅仅想到这个,就直接实现了。


    4 将链表的元素依据某个pivot进行partition,这能够用作链表快排的函数。


    5 将两个链表中的元素相加,分为两个版本号,第一个是:

    高位在表头。那么先将链表长度补成一致,再进行递归调用就可以。



    低位在表头。

    直接相加就可以,仅仅须要处理最后元素可能的进位!!



    6 推断一个链表中是否有环,假设有。返回环的起点。假设没有,直接返回,

    首先。推断一个链表是否有环,典型的追及问题,一个快指针fast,每次走两步,慢指针slow,每次走一步。

    假设存在环,则慢指针一定会在进入环的第一圈内就与快指针相遇。假设不是第一圈,也就意味着,慢指针在第一圈时,会被快指针追上

    并超过,显然是不可能的。假设在点i处超越,那么此时慢指针在i处,快指针在i+1处,那么前一步。快指针在i-1处。慢指针也在i-1处。这

    与“指针不相遇”如果矛盾。


    上述程序有些繁琐,特别是在处理 fast与slow的关系时,以下的代码比較简单也比較直观



    PS:全部代码的易错点均在代码凝视中~~~~




    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    面试干货——年底干货大放送,你准备好了吗?(转)
    JavaScript学习 三、变量、作用域和内存
    JavaScript学习 二、基础
    JavaScript学习 一、简介
    从统计看机器学习常见算法
    [zz]unity 性能优化
    游戏统计指标
    [zz]sql优化相关
    [zz]sql语句执行顺序
    unity 链接
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4777670.html
Copyright © 2011-2022 走看看