单链表操作个人归纳(总结)

            我一开始学单链表时,明白原理,但是一看到那些操作,头就有点晕,一堆指针插进了我的头脑里,无法自拔。但是后来我发现那些操作中,也有一点规律,于是我便认真对比、归纳,终于得出了一些规律,但是这些规律,最好理解,不要死记(如果暂时有点乱,那就死记下来,然后冷静理解,也许到上机时你会突然发现要这样,这样表明你已经理解了这些规律,而不是死死地想起这些规律)。以下是我总结的规律:

     1、first通常不移动,但除析构函数,通常用第二个指针(如p指针、q指针、r指针)来进行操作。

     2、遍历、求长度、按位查找、按值查找这四个开头都有p=first->next;  即p都首先指向第一个非头结点

     3、遍历、求长度、按位查找、按值查找、删除、插入一开始都需要扫描,即都有while语句与p指针

            while(p!=NULL________)             //公共部分

             {

                    ......

                    p=p->next;

                    ......

             }

      4、插入与删除都是“先连后断”(这个最好看两个的示意图,理解)

      5、凡是有p=p->next;和cout++;  顺序都是先p=p->next;后cout++;   简称:“先移后+”

      6、只有按位查找、插入、删除有if()  throw "位置";

      7、若while条件中有count<_____,那么在while语句后肯定有if(p==NULL) throw "位置";

      8、删除和插入操作开头都是p = first; count = 0;  而求长度时是:p = first -> next; count = 0;

           当时我就有个疑问:为什么求长度时,p指针的起始位置是在第一个非头结点处,但是count计量器初始值为0,那么不就会少算一个(即第一个非头结点没算上)?

           后来在我的左思右想中,我发现了因为它是先移动p指针,count再+1,当p移动到NULL时,count还会+1,此时count多加的这个1,就可以把第一个非头结点算上了,最后大功告成,give me five!

     9、头插法和尾插法都有的公共部分:

          first = new Node; 

          .......

         for(i=0;i<n;i++)

         {

                 s = new Node;

                 s -> data = a[i];

                 ......

          }

     10、在按位查找、删除和插入中的while条件中,按位查找的是count<i , 而删除和插入则是count<i-1

            如果乱了,可以这样理解,按位查找是查找第i个元素,所以count<i;删除和插入操作中要先找到第i-1个结点,所以就count<i-1。这表明,while条件中,如果count小于a,那就是循环到第a个结点就结束循环。

     11、按位和按值查找中count=1,而求长度、插入、删除中count=0!

  以下是我归纳的注意点:

       ①、删除时把被删除的数用一个变量保存下来,以便以后的操作。

       ②、记住:尾插法还要创建一个尾指针(如r)!到最后,还要加上 r ->next = NULL;

       ③、删除与析构操作中的q最后要delete!

       ④、删除中的if条件中还有 p->next == NULL;

       ⑤、书上的指针名不是唯一的,可以用其它字母、单词替换!!!!


      以上只是博主小小小小小小小小小小的总结,学霸、学神可忽视,若有补充、错误,欢迎大家提出宝贵的意见。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值