链表总结

1、在O(1)时间复杂度删除链表节点

      将给定节点删除,让其值等于其下一个的值,此时此节点的指针指向其后两个节点的位置。

2、链表倒数第n个节点 删除链表倒数第n个节点

      先用累加器计算出链表中元素的个数,然后从头结点开始找到倒数第n个节点(即第count-n+1个节点)。删除即再结合O(1)时间复杂度删除链表节点。

3、删除链表中的元素

      从第一个元素开始比较其值是否等于给定的值,若相等则用head->next=head->next->next删除head->next,否则指针后移。

4、删除排序链表中的重复元素

      前后两个相邻指针,若值相同,前一个指向其next的next,删除其next。注意空链表和只有头尾指针的情况。

5、翻转链表

      将第一个元素移到最后一个元素,a=head->next,head指向last,last=a,head后移至NULL结束。

6、链表求和

       思考有3种情况,第一:两个链表一样长;第二:两个链表非空但不一样长;第三:有空链表。第三种情况直接返回非空链表。当同一位置两个链表都有值时,加和,在新链表中的相应位置,若和<10,为原值,若值>10时,其除以10的余数为返回值,十位数加到下一位置两链表求和中。当同一位置有一链表结束,直接返回未结束链表。最后元素求和结束时若还有除以10的十位数需重新建立一个结点赋值。

7、链表插入排序

       链表是从小到大排列的,若前一个比后一个大,后一个需要从前面找到合适的位置重新排序,用p、q代表前后相邻的节点,当p>q时用一个新节点从头找到最后一个比q小的,将p插到其后,否则p、q依次向后移动。

8、链表划分

       创建两个链表,leftDummy和rightDummy分别代表小于和大于等于val的链表头结点,head依次后移,分别将小于和大于等于val的依次放入leftDummy和rightDummy,不需要排序,最后将两个链表合起来,leftDummy的最后一个节点指向rightDummy的第二个结点,rightDummy最后指向NULL。

9、合并两个链表

      若有一个链表为空,直接输出非空链表,若两个链表都非空,找出最小的那个data 作为新的链表的第一个元素,然后两个链表从头开始比较大小,依次放到新的链表,取出元素后,其后元素依次前移,相当于两个链表都比较第一个元素。直到有一个链表结束,直接将另一个链表全部输出。

10、两两交换链表中的结点

        若链表为空或只有一个元素直接返回,两两交换,先记下第一个结点的值,将后一个节点的值赋给前一个节点,后一个节点等于记下的前一个节点的值。然后节点后移两个。

感想:题目中给出的head是链表的第一个元素,后面定义节点x=head,用x对原链表进行修改,最后返回的head即修改后的链(返回头结点代表链)。倒数第几个的题目可以将head认为是空的头结点,其他不可以。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值