《劍指offer》面試題18(2)

2021-09-11 22:19:01 字數 997 閱讀 9232

在乙個排序的鍊錶中,如何刪除重複的節點?比如[1,2,2,3,3,3],刪除之後為[1];

思路:由於是已經排序好的鍊錶,需要確定重複區域的長度,刪除後還需要將被刪去的前與後連線,所以需要三個節點pre,cur,post,cur-post為重複區域(需要刪除),刪除後將pre與post.next連線即可。需要引入乙個布林型變數needdelete,來幫助判斷該不該刪除,也就是post往後移到什麼時刻停,並且刪完之後記錄下一次刪除。

此外,要注意被刪結點區域處在鍊錶頭部的情況,因為需要修改head。

package chapter3;

import chapter2.listnode;

public class p122_deleteduplicatednode

}public static listnode deleteduplication(listnode head)

else if(needdelete && cur.val!=post.val)

else

}if(needdelete && pre!=null)//尾部刪除操作,尾部有重複的數字,例如112333

pre.next = null;

else if(needdelete && pre==null)//全部重複

head = null;

return head;

}public static void printnode(listnode node)

system.out.print(cur.val);

system.out.println();

}public static void main(string args)

}

注意點見**註解部分。

測試用例:

a.功能測試(重複的節點位於鍊錶的頭部/中間/尾部;鍊錶中沒有重複的節點)。

b.特殊輸入測試(指向煉表頭節點的為nullptr指標;鍊錶中所有節點都是重複的)。

參考:

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...

劍指offer面試題15

面試題15 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第乙個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。預備知識 鍊錶結點的定義如下 ...