1. 程式人生 > >連結串列:刪除連結串列中重複的結點(java實現)

連結串列:刪除連結串列中重複的結點(java實現)

題目描述

在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5

程式碼如下:未進行優化


 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

public class Solution {
    //將所有重複的結點都刪除
public ListNode deleteDuplication(ListNode pHead) { if(pHead == null){ return null; } ListNode realHead = new ListNode(-1); realHead.next = pHead; ListNode p = realHead;//儲存當前結點的前趨 ListNode q; q = pHead;//儲存當前結點 while
(q != null){ int value = q.val; ListNode l = q.next; boolean flag = false; while(l != null && l.val == value){ flag = true; l = l.next; } if(l == null){ if(flag){ p.next = null
; break; }else{ break; } } if(l.val != value){ if(flag){ p.next = l; q = l; l = q.next; }else{ p = q; q = l; l = q.next; } } } return realHead.next; } /** * 牛客網:刪除連結串列中重複出現的結點(該程式實現的是將重複出現的值的結點保留一個 * @param pHead * @return */ public ListNode deleteDuplication(ListNode pHead) { if(pHead == null){ return null; } ListNode p = pHead;//儲存當前結點的前趨 ListNode q; q = pHead.next;//儲存當前結點 while(q != null){ if(p.val == q.val){//當前元素已經出現過,則刪除該結點 p.next = q.next; q = p.next; continue; }else{ p = q; q = p.next; } } return pHead; } }

相關推薦

連結串列刪除連結串列重複結點java實現

題目描述 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->

劍指offer之刪除連結串列重複結點Java實現

刪除連結串列中重複的結點 NowCoder 題目描述: 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->

劍指offer面試題12矩陣的路徑Java實現

題目:請設計一個函式,用來判斷在一個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣中向左,向右,向上,向下移動一個格子。如果一條路徑經過了矩陣中的某一個格子,則該路徑不能再進入該格子。 例如 a b c e s f c s a d e e 矩

在單鏈表刪除倒數第k個節點java實現

實現方式很多,在這裡只說兩種實現方式。看不懂時候,大家可以畫畫圖,對理解為什麼很有幫助。 第一種方式: 1.首先判斷K值和連結串列是否為空,如果k<=0,或連結串列為空,直接返回head; 2.滿足上面條件後,定義ListNode P=head,重頭

【OS大作業】用多執行緒統計txt檔案字元個數Java實現

問題描述 給定一個txt檔案,利用不同個數的執行緒查詢檔案中某字元的個數,探究執行緒個數與查詢時間的關係。 本作業程式碼使用JAVA實現,版本為10.0.2,使用的IDE為Eclipse4.9.0. 結果測試所用的txt檔案內容為英文,編碼格式為UTF-8。 原始碼 第一版程式碼:(

劍指offer之二維陣列的查詢Java實現

2. 二維陣列中的查詢 題目描述 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

隨機選擇陣列元素並刪除,直到刪完為止java實現

import java.util.Random; public class RandomSelect { public static void selAndDel(Object[] A){ int delNum = 0; Random rand = ne

算法系列插入排序的兩種改進規避邊界檢測和取消交換Java實現

前言:演算法第四版習題2.1.24插入排序的哨兵和習題2.1.25不需要交換的插入排序 規避邊界檢測: 在插入排序的實現中先找到最小的元素並將其置於陣列的第一個位置,可以省掉內迴圈的判斷條件 j>0 。能夠省略判斷條件的元素稱為哨兵。 public class Ex

刪除連結串列重複結點java

【題目描述】在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5 【解題

LeetCode題目-- 刪除連結串列的節點python實現

題目 請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個連結串列 -- head = [4,5,1,9],它可以表示為: 4 -> 5 -> 1 -> 9 示例 1

LeetCode第23題合併K個有序連結串列JAVA實現

題目: 我的解答: 思路很簡單,把所有的資料先讀到ArrayList中然後轉到陣列中,然後排序,然後構建新連結串列 程式碼: /** * Definition for singly-linked list. * public class ListNode {

LeetCode第24題兩兩交換連結串列的節點JAVA實現

題目: 我的解答: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(i

常見連結串列操作-刪除連結串列倒數第n個節點JAVA實現

問題 給出一個單向連結串列,刪除該連結串列倒數第n個節點,並返回頭節點。 例如: 給出連結串列 1->2->3->4->5,n=2 返回連結串列 1->2->3->5 解題思路 最容易想到的演算法: 先遍歷一次連結串列,

劍指offer面試題6從尾到頭列印連結串列Java實現

題目:輸入一個連結串列的頭結點,從尾到頭反過來打印出每個結點的值。 思路:因為要實現從頭到尾遍歷,然後從尾到頭列印,也就是說第一個遍歷到的最後一個列印,最後遍歷到的第一個列印,這很明顯符合棧 “先進後出” 的特點,所以我們可以利用棧來實現這種順序。 測試用例: 功能測試:

leetcode連結串列題--刪除連結串列的倒數第N個節點java實現

原題 給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。 示例: 給定一個連結串列: 1->2->3->4->5, 和 n = 2. 當刪除了

如何在O(1)時間刪除連結串列指定節點Java實現

宣告:題目背景為劍指offer-13 在O(1)時間刪除連結串列節點 給出一個連結串列如下: 刪除連結串列中給定節點,我想最容易想到的方法就是迴圈遍歷,假設想刪除節點toBeDeleted,

詳細分析連結串列的遞迴性質Java 實現

[TOC] # 連結串列中的遞迴性質 ## 前言 在前面的 [連結串列的資料結構的實現](https://www.cnblogs.com/txxunmei/p/13592118.html) 中,已經對連結串列資料結構的實現過程有了充分的瞭解了。但是對於連結串列而言,其實它還和遞迴相關聯。雖然一般來說遞迴

資料結構-連結串列java實現

/** * 連結串列節點定義 * */ private class Node { private Object data; private Node next; public Node getNext() { return next;

無序連結串列實現順序查詢Java實現

連結串列中的每個結點儲存一個鍵值對,get()的實現即為遍歷連結串列,equals()方法比較需要被查詢的鍵和每個結點中的鍵,如果匹配成功就返回相應的值,否則返回null。put()的實現也是遍歷連結串

劍指offer之兩個連結串列的第一個公共點Java實現

兩個連結串列的第一個公共點 輸入兩個連結串列,找出它們的第一個公共結點 思路:我們先遍歷找到兩個連結串列的長度m和n, 如果m大,m比n大多少,比如說k,那麼先讓m先走k步,然後n和m再一起走。