临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

数据结构与算法链表

3月7日 相思宫投稿
  链表
  关于单链表,比较特殊,在面试中,要时刻注意时间复杂度和额外空间复杂度的问题
  所以在笔试中,额外空间的应用无所谓,能做到即可,可以使用数组作为额外空间来使用
  而在面试中要注意把额外空间复杂度降到最小,所以用克隆的方式来代替额外空间
  这样子可以用不多的几个变量来确定关系,而位置的关系是通过克隆的位置关系来去确定的,这样的好处是让复杂度变低的同时还达到很好的效果桶排序
  基数排序:分别按照个十百为先分别排序,然后再往上排序,对于每一位都是已经排好序,虽然不用进行比较,但是花费的空间和时间比较多基本稳定
  在排完序之后还保持着排序前的基本序列,在班级中按照成绩排,相同的排序按照学号前后综合排序
  在小样本的时候采用一种排序方式,大样本的时候采用另一种,让整体复杂度减小哈希表
  无序的,但有序表的key是有序的
  增删改查的复杂度都是常数,但是这个常数可能比较大
  unordermap,unordertree
  快慢指针求回文
  也可以申请栈,将每个数遍历后都放进栈里面去,然后依次弹出,比较
  可以采用快慢指针的方式,但是将头结点的下一位做慢指针,可以解决奇数和偶数问题
  随机哈希表的设置
  设置一个哈希表,将每个数的next和rand都放进哈希表里,第一次遍历老链表就是放进哈希表,第二次是根据哈希表里的next和rand,设置新链表的next和rand
  直接插入克隆结点在当前结点后面,这样的话就不用在哈希表里设置next了,然后在遍历的时候设置一下边界,一对对遍历,存入rand即可,克隆节点的rand就是原本节点rand的克隆节点
  有环链表
  可以申请哈希表额外空间,记录每个遍历后的结点,第一次重复访问到的节点就就是环的开头
  快慢指针:一开始都在head,慢指针一次走一步,快指针一次走两步,会在环里相遇,相遇后,快指针回到head,快慢指针同时走,都走一步,最终会在环的开始节点相遇无环链表
  判断两条链表是否在同一地址,即最后节点是否相同,因为当两条单链表有相交时,相交部分一定是相同的,next指针是不会断的。
  判断最后节点相同时即可判断出他们相交
  让长链表先走x步,x为二者差值,然后二者同时走,一定会在相交节点相遇cur1n0?head1:head2谁长,谁的头是head1cur2cur1head1?head2:head1谁短,谁的头是cur2
  重定位长短
  如果是相同环,则把终止节点设置为俩链表入环节点,其余按照无环链表操作,如果不同环,从loop1开始,如果遇得到loop2,则是不同入环节点,返回谁都可以,但如果没有,则不相交
  合并k个已排序链表
  思路:多个指针,有限几个变量,采用merge方法,拆分出左右两组链表,然后进行合并,大化小step1:从链表数组的首和尾开始,每次划分从中间开始划分,划分成两半,得到左边n2n2n2个链表和右边n2n2n2个链表。step2:继续不断递归划分,直到每部分链表数为1。step3:将划分好的相邻两部分链表,按照两个有序链表合并的方式合并,合并好的两部分继续往上合并,直到最终合并成一个链表。classSolution{public:ListNodeMerge2(ListNodephead1,ListNodephead2){if(phead1NULL)returnphead2;if(phead2NULL)returnphead1;ListNodeheadnewListNode(0);ListNwhile(phead1phead2){if(phead1valphead2val){curnextphead2;phead2phead2}else{curnextphead1;phead1phead1}}if(phead1)curnextphead1;elsecurnextphead2;}ListNodepideMerge(vectorListNodelists,intleft,intright){if(leftright)returnNULL;elseif(leftright)returnlists〔left〕;intmid(leftright)2;returnMerge2(pideMerge(lists,left,mid),pideMerge(lists,mid1,right));}ListNodemergeKLists(vectorListNodelists){returnpideMerge(lists,0,lists。size()1);}};链表中环的入口节点可以采用哈希表,放进去的节点遇到重复的第一个就是入环节点快慢指针:快指针走两步,慢指针走一步,当快慢指针相遇时,快指针返回起点,快慢指针一起走,都是走一步,再次相遇的节点就是入环节点classSolution{public:ListNodeEntryNodeOfLoop(ListNodepHead){if(pHeadNULL)returnNULL;ListNodeslowpHListNodefastpHwhile(fast!NULLfastnext!NULL){if(slowfast)}if(fastNULLfastnextNULL)returnNULL;fastpHwhile(fast!slow){}}};链表中倒数最后k个结点两次遍历的方法,先统计总长,然后nk次遍历找到可以快慢指针,快指针先走k步,然后和慢指针一起走classSolution{public:ListNodeFindKthToTail(ListNodepHead,intk){writecodeherewhile(pHeadNULL)returnNULL;ListNodefastpHListNodeslowpHfor(inti0;i){if(fastNULL)returnNULL;}while(fast!NULL){}}};删除链表的倒数第n个结点classSolution{public:ListNoderemoveNthFromEnd(ListNodehead,intn){添加表ListNoderesnewListNode(1);当前节点ListN前序节点ListNListN快指针先行n步while(n)while(fast!NULL){}删除该位置的节点返回去掉头}};两个链表的第一个公共结点循环遍历两个链表,迟早会相遇publicListNodeFindFirstCommonNode(ListNodepHead1,ListNodepHead2){ListNodel1pHead1,l2pHead2;while(l1!l2){l1(l1null)?pHead2:l1。l2(l2null)?pHead1:l2。}returnl1;}额外空间的,所有都存进去,看是否有相同的双指针,先走差值步,然后同时遍历,第一个相同的就是公共结点
  链表相加采用反转链表的方式classSolution{public:ListNodereverselist(ListNodephead){if(pheadNULL)ListNListNodepreNULL;while(cur!NULL){ListN}}ListNodeaddInList(ListNodehead1,ListNodehead2){writecodehereif(head1NULL)returnhead2;if(head2NULL)returnhead1;head1reverselist(head1);head2reverselist(head2);ListNoderesnewListNode(1);ListNintcarry0;while(head1!NULLhead2!NULLcarry!0){intval1head1NULL?0:head1intval2head2NULL?0:head2inttempval1val2carrytemp10;temp10;headnextnewListNode(temp);if(head1!NULL){head1head1}if(head2!NULL){head2head2}}returnreverselist(resnext);}};采用辅助空间的方式publicclassSolution{publicListNodeaddInList(ListNodehead1,ListNodehead2){writecodehereif(head1null)returnhead2;if(head2null){returnhead1;}使用两个辅助栈,利用栈先进后出,相当于反转了链表StackListNodestack1newStack();StackListNodestack2newStack();ListNodep1head1;ListNodep2head2;将两个链表的结点入栈while(p1!null){stack1。push(p1);p1p1。}while(p2!null){stack2。push(p2);p2p2。}进位inttmp0;创建新的链表头节点ListNodeheadnewListNode(1);ListNodenHeadhead。while(!stack1。isEmpty()!stack2。isEmpty()){val用来累加此时的数值(加数加数上一位的进位当前总的数值)栈1不为空的时候,弹出结点并累加值if(!stack1。isEmpty()){valstack1。pop()。}栈2不为空的时候,弹出结点并累加值if(!stack2。isEmpty()){valstack2。pop()。}求出进位tmpval10;进位后剩下的数值即为当前节点的数值ListNodenodenewListNode(val10);将结点插在头部node。nextnHnH}if(tmp0){头插ListNodenodenewListNode(tmp);node。nextnHnH}returnnH}}
  单链表的排序数组形式:创建一个数组,将链表内容放入,然后排序完恢复链表形式classSolution{public:ListNodesortInList(ListNodehead){ListN遍历链表,将节点值加入数组while(p!NULL){nums。pushback(pval);}对数组元素排序sort(nums。begin(),nums。end());遍历数组for(inti0;inums。size();i){将数组元素依次加入链表pvalnums〔i〕;}}};递归形式:每次分成两部分,然后将分割后的部分进行局部排序,最终达到整体有序classSolution{public:ListNodemergelist(ListNodephead1,ListNodephead2){if(phead1NULL)returnphead2;if(phead2NULL)returnphead1;ListNodeheadnewListNode(0);ListNwhile(phead1phead2){if(phead1valphead2val){curnextphead2;phead2phead2}else{curnextphead1;phead1phead1}}if(phead1)curnextphead1;elsecurnextphead2;}ListNodesortInList(ListNodehead){writecodehereif(headNULLheadnextNULL)ListNListNListNwhile(right!NULLrightnext!NULL){}左边指针指向左段的左右一个节点,从这里断开leftnextNULL;分成两段排序,合并排好序的两段returnmergelist(sortInList(head),sortInList(mid));}};
  判断链表是否为回文结构存入数组的方式,然后将数组反转后对比存入数组的方式,得到数组长度,双指针分别从两端开始classSolution{public:boolisPail(ListNodehead){将链表元素取出一次放入数组while(head!NULL){nums。pushback(headval);}双指针指向首尾intleft0;intrightnums。size()1;分别从首尾遍历,代表正序和逆序while(leftright){如果不一致就是不为回文if(nums〔left〕!nums〔right〕)}}};快慢指针方式,记录到中间位置,然后反转后半部分,再对比(满足时间O(n),空间O(1))classSolution{public:ListNodereverse(ListNodehead){ListNodepreNULL;while(head!NULL){ListN}}boolisPail(ListNodehead){writecodehereListNListNwhile(fastnext!NULLfastnextnext!NULL){}slowreverse(slow);while(slow!NULL){if(fastval!slowval)}}};
  链表的奇偶重排双指针的方式,将偶数的节点跳过,奇数的next直接指向下一个奇数,偶数则成为奇数的nextclassSolution{public:ListNodeoddEvenList(ListNodehead){writecodehereif(headNULL)returnNULL;ListNListNListNwhile(even!NULLevennext!NULL){}}};
  删除有序链表中重复的所有元素从0开始,不从1开始,这样的话可以从重复节点的上一个开始判断,每一次遇到重复前都可以判断出后面两个是否有重复元素classSolution{public:ListNodedeleteDuplicates(ListNodehead){writecodehereif(headNULL)returnNULL;ListNoderesnewListNode(0);ListNwhile(curnext!NULLcurnextnext!NULL){if(curnextvalcurnextnextval){while(curnext!NULLcurnextvaltemp){}}}}};
投诉 评论

坐车坐腻了,乘船出海吧佳辰美景样样不缺身为海边的人有一个优势就是如果开车开腻了自驾游,实在没地方想去了,那么可以乘船出海。出海的玩法很多,相信大家也都有过了解。而山东省日照市就有一个帆船锦标赛基地,平时……499元起!4000mAh双系统,11复刻iPhone13虽然今天还没有到6月18日,但各家手机厂商已经早早地开始针对618活动进行不同程度的打折优惠。苹果这边也不例外,对于苹果粉丝来说,各平台的优惠可以说是无时无刻都在诱惑着大家,很……演员王茜华千里追夫,二婚和沈航生下儿女,她真的幸福吗?1996年,26岁的王茜华第一次接到导演姜文的邀约,出演《北方故事》的女主角,这对她来说是一个一炮而红的机会。然而等她兴冲冲赶到剧组体验完生活后,却被通知女主角换成了还在……没有穷人的卡塔尔豪掷2290亿建新城,要建造建筑与艺术的国际2022年世界杯已经开幕一周了,热度却在持续发酵。主办国卡塔尔这个人口不足300万,面积和我国天津一般大的国家,因为财富彻底出圈。虽说卡塔尔官方并未披露本届世界杯的……随遇而安(四十六)随遇而安(四十六)扪心自问不是多少喜欢足球,还是废寝忘食的几乎一场不漏的看着世界杯比赛。谁输谁赢并不是太在意,就看着赛场上的那些男人或哭或笑,或兴奋或痛苦,或激情飞扬或郁……1899元!影驰发布名人堂1300W白金电源理论显卡供电12近日,影驰发布了全新的名人堂GH1300电源,符合新的ATX3。0标准,而且采用了名人堂特色的纯白外观设计,象牙白喷粉。该电源通过80PLUS白金牌认证,主动式APFC,……乡村振兴恒天翼数字乡村智慧旅游综合管理平台信息化建设方案通过智慧旅游管理平台的建立,健全统一指挥、功能完善、反应灵敏、协调有序、运转高效的运行监测机制,有效监测旅游市场的运行状态,及时有效地整合旅游信息,为日常管理、辅助决策提供支撑……CBA下赛季最大黑马?深圳队18人名单全部确定,四位国手齐聚深圳队今年休赛期闷声发大财深圳队是今年休赛期引援最为成功的球队之一,从广东队得到了周鹏,签下了自由球员李京龙和赵宴满,从青年队上调了李文豪、王浩然、马明坤、廖智鹏。当然,……治疗痰湿耳鸣,三味药一通一补一消大有奇效耳鸣有三种原因:第一种是因虚而鸣。就像肚子饿了会咕咕响一样,肚子响是脾胃里面空虚了,耳朵也会响,耳朵响是肾精亏虚了,因为肾开窍于耳。第二种是因实而鸣。耳朵里头被气机……离谱!三国杀再出300字武将!不要以为有黑丝就可以一笔勾销了三国杀最近的活动可谓是不少,又是送满减券又是上新武将皮肤的,好家伙是真不让玩家休息啊,所以我最近也是一直在刷有什么新出的武将没有,还真让我找到了一个,只不过这技能把我头都看花了……数据结构与算法链表链表关于单链表,比较特殊,在面试中,要时刻注意时间复杂度和额外空间复杂度的问题所以在笔试中,额外空间的应用无所谓,能做到即可,可以使用数组作为额外空间来使用而……早晨问安问候是一种快乐,开心是一种幸福,早晨好1、阵阵微风,寄托一份相思;丝丝牵念,送去一片真情。人生中莫过于真诚的朋友,最难寻的,莫过于交心的知己!2、一直深信,不管时光如何变迁,内心的宁静,可以滋养山河岁月;内心……
被妇科炎症缠身?日常做好这3点,远离炎症一身轻松妇科炎症,实际上是一大类疾病的统称,它可以包含很多部位,比如外阴、阴道、宫颈、子宫内膜,以及附件部位等。所以,在提及妇科炎症时,大家不要觉得就只是阴道炎,其他生殖系统部位……静侍一卷冬,浅描半叠念听说,寒冬渐近。冬夜漫漫,月光清清,渲染着季节的斑澜,静侍一卷冬,浅描半叠念,悄悄梢去远方。漫步于时空,行走于空寂的夜里,感受季节变迁的温度,品悟着岁月静好的深情,与时光……关于世界杯的鲜为人知的事实,第一届女足世界杯只有80分钟与以往的比赛不同,今年的比赛于11月和12月在卡塔尔举行。在第22届世界杯来临之前,回顾一下这个举世闻名的比赛,探索一些有趣的鲜为人知的事实。第一届比赛第一届世界杯……马不停蹄创首单!信托公司业务转型驶入快车道今年以来,多家信托公司推出首单创新产品。日前,招商银行、泰康人寿、泰康健投和五矿信托共同在寿险市场推出首单信托直付养老社区的养老类保险金信托;中航信托推出今年银行间债券市……睡前朋友圈晚安心语心情文案愿晨昏相依,四季欢喜愿能活出自己最精彩的样子,遇见一些温暖的人,拥有更独立的人格,更坚定、更平静、更宽容,享受现在的状态,也想变得更好,好好珍惜今天,也更期待明天。晚安把身体照顾好,把喜欢的……潜江公交浩口充电站正式营运潜江新闻网讯(记者曹以成通讯员胡绪生)12月27日,市公交集团选址于原浩口交通分局驻地的浩口充电站项目正式对外投入运营,此举弥补了潜江境内318国道旁无大型充电设施的空白。……黄磊大女儿被嘲!看到黄多多的这些改变,你还会这样认为吗?12月20日,一则黄磊大女儿黄多多做泡芙的视频引起网友围观。视频中,16岁的黄多多,身穿蓝色挂脖毛衣,扎着马尾辫,笑容甜美,手法娴熟的为制作泡芙。打料,粉碎,造型,……王者荣耀四大路人局炸鱼英雄,为何上不了KPL赛场?原因太扎心文丹青解说原创文章盗载必究一般情况下,普通玩家手中的版本,是《王者荣耀》的正式服版本,而KPL职业玩家手中的版本,是《王者荣耀》的比赛服专用版本。比赛服版本,更新日……太美了!就在本月,行星伴月超级月亮记住这些时间点来源:央视财经天文预报显示,6月份是天文爱好者观赏行星伴月、超级月亮等天象的好时机。记者从北京天文馆获悉,北京时间6月23日凌晨1时以后,火星将出现在月亮的旁边,上……超详细的慢性肾脏病饮食指导,值得收藏大家好,我是大脸猫营养师。想必,大家都知道肾脏的重要性,肾脏是人体的代谢器官,可以将人体的代谢废物(如尿素、肌酐和尿酸)通过尿液进行排出,以维持人体生命健康。但因为……马思纯直言你爸交出德云社,我们就结婚,郭麒麟一句话笑翻全场谈到大林子郭麒麟,大家总会不自觉地,提起郭德纲、德云社,由于郭德纲的成功,郭麒麟也自然而然的被冠上了星二代的标签,当然,在这个圈子中,星二代可不少,可是有很多人对这个称呼一直很……摩登百科李冰冰童瑶微撞衫,人人都爱冠军战袍ArmaniPri红毯之上,无论国内还是国外,总是各大高定、仙牌们血腥厮杀的战场。若盘点近两年影后、视后、歌后最爱Pick的品牌,ArmaniPriv一定榜上有名。ArmaniPriv是A……

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找