刪除有序鍊錶中的重複節點

2021-10-09 20:33:25 字數 1314 閱讀 5823

這道題是我在筆試 極**技 公司遇到的程式設計題,當時有點緊張,一直有點bug,現在改好了,寫一篇部落格記錄下

題目:給定乙個鍊錶: 1->1->2->3->5    返回鍊錶:2->3->5

給定乙個鍊錶: 1->1->2->2->5    返回鍊錶:5

給定乙個鍊錶: 1->2->3->3->5    返回鍊錶:1->2->5

給定乙個鍊錶: 1->2->2->5->5    返回鍊錶:1

這道題難度不大,但是可能有點細節會導致問題考慮的細節差了一點

首先我們分析:

第一步:我們建立兩個指標,一左一右

第二部:右指標和左指標比較,相同的話就一直後移,如果一直為空的話就直接返回結果,注意要將result得尾巴斷掉

第三步:當遇到left還有,right沒有了的話,直接將left接到result 後面

說起來很簡單,我們還是從**上去實現吧

首先我們建立乙個節點用於儲存資訊:

listnode

class listnode

}

在 main程式入口函式中初始化陣列,以及呼叫對應的方法刪除後,再列印

public static void main(string args) 

system.out.println();

//刪除重複節點

listnode result =deleteduplicates(l1);

//列印鍊錶

listnode point1 = result;

while(point1!=null)

}

下面我們就來設計 刪除重複節點的函式 deleteduplicates

public static listnode deleteduplicates (listnode head) 

listnode result = new listnode(-1);

listnode p = result;

listnode left = head;

listnode right = head.next;

while(right!=null)

}left = right;

right = right.next;

if (right==null)

}else

}return result.next;

}

可以看出,如果left和right的值不衝突的話,就將left接到result後面。

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...

刪除鍊錶中重複的節點

題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 這個題目首先考慮到頭結點也可能是重複的節點,所以需要設定乙個頭結點之前的節點。之後需要3個指標 pre,cur和next struct...