leetcode(使用的是中文**:領扣):83
給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。
示例 1:
輸入: 1->2->3->3->4->4->5示例 2:輸出: 1->2->5
輸入: 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簡單的畫個圖表示一下(用res更好理解一點):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);}}
最後是官方給出的使用迭代的方法:
解法三:
public剛剛開始接觸leetcode,許多解法都還沒怎麼分析複雜度,所以自己的解法也不一定是什麼好的方法,大家簡單看下思路就好。listnode deleteduplicates(listnode head)
else
}return
head;
}
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指標,以便它跳過下乙個...