Java編程刪除鏈表中重復(fù)的節(jié)點問題解決思路及源碼分享
一. 題目
在一個排序的鏈表中,存在重復(fù)的結(jié)點,請刪除該鏈表中重復(fù)的結(jié)點,重復(fù)的結(jié)點不保留,返回鏈表頭指針。
二. 例子
輸入鏈表:1->2->3->3->4->4->5
處理后為:1->2->5
三. 思路
個人感覺這題關(guān)鍵是注意指針的指向,可以定義一個first對象(值為-1,主要用于返回操作后的鏈表),first.next指向head,定義一個last同樣指向first(主要用于操作記錄要刪除節(jié)點的前一個節(jié)點),定義一個p指向head,指向當(dāng)前節(jié)點。
操作流程:
①先判斷當(dāng)前p指向與p.next指向是否為空,為空則進(jìn)入⑤,不為空進(jìn)入②;
②判斷當(dāng)前節(jié)點p的值與與p.next的值是否相等,如果相等,進(jìn)入③,不相等,進(jìn)入④
③記錄p.val的值為val,循環(huán)判斷val是否與當(dāng)前p指向相等,相等的話p = p.next,last.next指向p;
④last指向p,p指向p.next;
⑤返回first.next;
四. 程序源碼
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
ListNode first = new ListNode(-1);
first.next = pHead;
ListNode last = first;
ListNode p = pHead;
while(p!=null&&p.next!=null){
if(p.val==p.next.val){
int val = p.val;
while(p!=null&&p.val==val){
p = p.next;
last.next = p;
}
}else{
last = p;
p = p.next;
}
}
return first.next;
}
}
總結(jié)
以上就是本文關(guān)于Java編程刪除鏈表中重復(fù)的節(jié)點問題解決思路及源碼分享的全部內(nèi)容,感興趣的朋友可以參閱:Java編程實現(xiàn)從尾到頭打印鏈表代碼實例、Spring boot jpa 刪除數(shù)據(jù)和事務(wù)管理的問題實例詳解、MySQL刪除表數(shù)據(jù)的方法以及本站其他相關(guān)專題,希望對大家有所幫助。如有不足之處,歡迎留言指出!感謝朋友們的閱讀。
相關(guān)文章
springboot 2.0 mybatis mapper-locations掃描多個路徑的實現(xiàn)
這篇文章主要介紹了springboot 2.0 mybatis mapper-locations掃描多個路徑的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Spring實現(xiàn)在非controller中獲取request對象
這篇文章主要介紹了Spring實現(xiàn)在非controller中獲取request對象方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08

