Part 1.
smoosh()函数,目的是将数组中出现的所有数字产生重复的部分删除,例如11223334444经过smoosh函数后会变成1234.
public static void smoosh(int[] ints) { // Fill in your solution here. (Ours is twelve lines long, not counting // blank lines or lines already present in this file.) int current = 0; for (int i = current + 1; i < ints.length; i++){ if (ints[current] != ints[i]){ current++; ints[current] = ints[i]; } } for (int i = current + 1; i < ints.length; i++){ ints[i] = -1; } }
Part 2.
squish()函数,与smoosh功能相同,只不过要用链表来实现。size>2的检测是题目给的。
public void squish() { // Fill in your solution here. (Ours is eleven lines long.) SListNode currentNode = head; while (size > 2 && currentNode.next != null){ if (currentNode.item.equals(currentNode.next.item)){ currentNode.next = currentNode.next.next; } else { currentNode = currentNode.next; } } }
Part 3.
twin()函数,目的是将数字出现的频率x2.同样用链表实现。SListNode有两个constructor,刚好其中一个可以在新建node的时候直接赋予item和next,思路与part2相似。
public void twin() { // Fill in your solution here. (Ours is seven lines long.) SListNode current = head; while (current != null){ current.next = new SListNode(current.item,current.next); current = current.next.next; } }