概要
題目來源鏈接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
難度:簡單
類型:鏈表
題目
給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。
示例
示例 1:
輸入: 1->1->2
輸出: 1->2
示例 2:
輸入: 1->1->2->3->3
輸出: 1->2->3
分析
參見:https://blog.csdn.net/cnds123321/article/details/106250755
代碼
Java代碼
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode temp=head;
ListNode tempDelNode;
if(null==head){// 考慮什麼都不輸入的情況
return head;
}
while (temp.next!=null){
if(temp.val==temp.next.val){
tempDelNode=temp.next;
temp.next=tempDelNode.next;
}else {
temp=temp.next;
}
}
return head;
}
}
C語言代碼
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
* 沒有頭結點
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode *temp,*tempDelNode;// *temp指的是用來記錄鏈表的開始結點的;*tempDelNode指的是用來記錄被刪除的結點
if(NULL==head){
return head;
}
temp=head;
while(temp->next!=NULL) {// 注意:這裏的循環條件是當前結點的下一個結點是否爲NULL
if(temp->val==temp->next->val) {// 比較當前結點的數據域和下一個結點的數據域是否相等
tempDelNode=temp->next; // 臨時保存當前重複結點的後繼結點(就是下一個結點),也是要被刪除的結點
temp->next=tempDelNode->next;// 將當前結點的next指針指向被刪除結點的下一個結點(後繼結點)
free(tempDelNode);// 釋放資源,刪除結點
} else { // 如果不是重複結點
temp=temp->next;// 繼續循環到下一個結點
}
}
return head;
}