日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

剑指Offer(Java实现)删除链表中重复的结点

發(fā)布時間:2025/4/16 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指Offer(Java实现)删除链表中重复的结点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5。

解題思路

先新建一個頭節(jié)點,然后向后查找值相同的結點,重復查找后刪除

代碼實現

/*public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;} } */ public class Solution {public ListNode deleteDuplication(ListNode pHead) {if (null == pHead) {return null;}// 新建一個結點,防止頭結點被刪除 ListNode firstNode = new ListNode(-1);firstNode.next = pHead;// 記錄前驅結點ListNode preHead = firstNode;// 記錄當前遍歷結點ListNode p = pHead;while ((null != p) && (null != p.next)) {// 若結點值出現重復if (p.val == p.next.val) {int val = p.val;// 刪除重復結點while ((null != p) && (val == p.val)) {p = p.next;}// 刪除重復結點后,進行鏈接preHead.next = p;} else {// 結點不重復,后移preHead = p;p = p.next;}}return firstNode.next;} }

注意

while ((null != p) && (val == p.val)) {p = p.next; }

其中,條件中的 (null != p) && (val == p.val) 不可以顛倒,否則會引發(fā)空指針異常。

因為,此時當循環(huán)到達p指向鏈表的末尾時,此時p.next為空,則p=p.next,p為null。若先判斷 (val == p.val) 會因p=null,使得讀取p.val時發(fā)生空指針異常;若先判斷 (null != p) ,則已不再滿足循環(huán)條件,由“&&”的截斷機制,不再繼續(xù)執(zhí)行判斷。

總結

以上是生活随笔為你收集整理的剑指Offer(Java实现)删除链表中重复的结点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。