LeetCode之83. 刪除排序鏈表中的重複元素

概要

題目來源鏈接: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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章