leetcode83 刪除排序鍊錶中的重複元素

2022-07-16 17:09:13 字數 2721 閱讀 7440

leetcode(使用的是中文**:領扣):83 

給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。

示例 1:

輸入: 1->2->3->3->4->4->5

輸出: 1->2->5

示例 2:

輸入: 1->1->1->2->3

輸出: 2->3

一開始沒有看到排序鍊錶這個條件,所以解法有一點麻煩

解法一:

思路:再建立乙個鍊錶b,然後遍歷原來的鍊錶a,將a中的元素新增到b的鍊錶尾部。

每次向b中新增元素時都檢查一下b中是否已經存在這個元素,若存在,則不新增。**如下:

package

leetcode.linkedlist83;

/*** definition for singly-linked list.

* public class listnode

* } */

class

solution

//原鍊錶的當前節點

listnode cur =head.next;

//建立乙個新的鍊錶

listnode newhead = new

listnode(head.val);

listnode newlist_cur =newhead;

while(cur!=null

) cur =cur.next;

}return

newhead;

}//檢測鍊錶中是否包含某個元素

boolean contains(listnode head,int

val)

else

}return

false

; }

public

static

void

main(string args) ;

listnode head = new

listnode(arr);

system.out.println(head);

listnode ret = (new

solution()).deleteduplicates(head);

system.out.println("最終結果:"+ret);}}

這裡為了測試**,我們這裡可以寫乙個將陣列轉化成鍊錶的函式本地測試用**(後面的**測試也是用的這個):

package

leetcode.linkedlist83;

/*** 用於本地測試 */

class

listnode

//鍊錶節點的建構函式

//使用arr為引數,建立乙個鍊錶,當前的listnode為煉表頭結點

listnode(int

arr)

this.val = arr[0];

listnode cur = this

;

for (int i = 1; i < arr.length; i++)

} @override

public

string tostring()

return

sb.tostring();

}}

解法二(這裡才用到題目的已經排序的條件):

思路:使用遞迴,在遞推之後回歸的過程中我們可以比較當前鍊錶和子鏈的值是否相等,相等的話就直接返回子鏈,否則就返回當前鍊錶。

鍊錶的遞迴,可以想象成不斷的把問題交給子鏈去解決,最後返回的時候也是不斷的返回子鏈的結果。

package

leetcode.linkedlist83;

public

class

solution2

else

else

head.next =deleteduplicates(head.next);

return head.val == head.next.val ?head.next:head;}}

public

static

void

main(string args) ;

listnode head = new

listnode(arr);

system.out.println(head);

listnode ret = (new

solution2()).deleteduplicates(head);

system.out.println("最終結果:"+ret);}}

簡單的畫個圖表示一下(用res更好理解一點):

最後是官方給出的使用迭代的方法:

解法三:

public

listnode deleteduplicates(listnode head)

else

}return

head;

}

剛剛開始接觸leetcode,許多解法都還沒怎麼分析複雜度,所以自己的解法也不一定是什麼好的方法,大家簡單看下思路就好。

LeetCode 83 刪除排序鍊錶中的重複元素

給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。definition for singly linked list.struct listnode struct listnode deleteducurrent nodelicates struct listnode head 示例 1...

LeetCode 83 刪除排序鍊錶中的重複元素

題目描述 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 輸入 1 1 2 輸出 1 2輸入 1 1 2 3 3 輸出 1 2 3解題思路 直接判斷下個節點的val是否與當前節點相同,相同則刪除,不同則將向後移。ac definition for singly linked li...

leetcode83 刪除排序鍊錶中的重複元素

描述 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2輸出 1 2示例 2 輸入 1 1 2 3 3輸出 1 2 3解答 1.直接求解 通過將結點的值與它之後的結點進行比較來確定它是否為重複結點。如果它是重複的,我們更改當前結點的next指標,以便它跳過下乙個...