CS61b homework3 打卡

part1:代码:注意最后不能直接写成ints=template,因为ints是在method中新建立的指向传入数组的引用,ints=template只是改变了ints的指向,而对传入的数组未改变,所以应该用循环对ints数组逐一赋值(这一问题lecture里面记得有专门讲过,看的时候没太注意听,编程的时候才发现都是坑啊2333)。

public static void smoosh(int[] ints) {
            int[]template=new int[ints.length];
            Arrays.fill(template, -1);
            int num=1;
            template[0]=ints[0];
            for(int i=1;i<ints.length;i++){
                if(ints[i]!=template[num-1])
                    {
                    template[num]=ints[i];
                    num++;
                    }
             }
            for(int i=0;i<ints.length;i++)
                ints[i]=template[i];
          }

part2 代码:注意比较SListNode.item时需要用object.equals()的方法,而不能直接用==,==只能用于primitive type比较值,用于Object可以理解为比较的是类似C++里面的地址吧,

一开始没注意这个问题直接写到currentNode.item==currentNode.next.item,列表根本就没变化,因为两个item的地址始终都不一样。

 public void squish() {
          SListNode currentNode=head;
         while(size>1&&currentNode.next!=null){
             if(currentNode.item.equals(currentNode.next.item)){
                 currentNode.next=currentNode.next.next;
                 size--;
             }
             else
                 currentNode=currentNode.next;
         }
      }

part 3:唯一一个没有改动的部分,感觉这个比前两个还是简单一些哈。

 public void twin() {
          if(isEmpty())
              return;
          SListNode currentNode=head;
          for(int i=1;i<=this.size;i++){
              SListNode newest=new SListNode(currentNode.item,currentNode.next);
              currentNode.next=newest;
              currentNode=currentNode.next.next;
          }
          size=size*2;
        
      }

运行结果:

原文地址:https://www.cnblogs.com/lyz1995/p/7154014.html