1. 程式人生 > >刪除排序連結串列中的重複數字 II -LintCode

刪除排序連結串列中的重複數字 II -LintCode

描述:

給定一個排序連結串列,刪除所有重複的元素只留下原連結串列中沒有重複的元素。

樣例:

給出 1->2->3->3->4->4->5->null,返回 1->2->5->null

給出 1->1->1->2->3->null,返回 2->3->null

思路:

這道題其實是之前的刪除連結串列中重複數字的一個升級版

1.我們先建立一個temp,賦一個連結串列中不會出現的值給它。並且建立一個新的連結串列頭節點dummy,用來存放連結串列中沒有重複的數字。

2.遍歷給定的連結串列中的每一個節點,如果該節點的val中的值等於它下一個節點的val的值(也就是該數值重複),那麼我們就把這個重複的

值重新賦給temp。如果它與下一個值不相等,我們就判斷一下它是否跟temp中的值相等,相等則說明它是重複數值的最後一個,不做處理,

不想等則說明它是一個不重複的數值,把它放進新的連結串列dummy中。然後進行下一個節點的操作。

3.由於我們的迴圈條件是head!=NULL && head->next!=NULL,也就是這個迴圈只會進行到倒數第二個節點。所以最後我們要對最後一個節點

特判一下。

4.這一條是專門吐槽ww的,做什麼題都讓我用陣列!就不用!啦啦啦~

AC程式碼:

/**
 * Definition of ListNode
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */
class Solution{
public:
    /**
     * @param head: The first node of linked list.
     * @return: head node
     */
    ListNode * deleteDuplicates(ListNode *head) {
        // write your code here
        double temp=1.2;
        ListNode *dummy=new ListNode(0);
        ListNode *s=dummy;
        if(head==NULL)
            return head;
        while(head!=NULL && head->next!=NULL)
        {
            if(head->val==head->next->val)
                temp=head->val;
            if(head->val!=temp)
            {
                ListNode *p=new ListNode(head->val);
                s->next=p;
                s=s->next;
            }
            head=head->next;
        }
        if(head->val!=temp)
        {
             ListNode *p=new ListNode(head->val);
             s->next=p;
             s=s->next;
        }
        return dummy->next;
    }
};

相關推薦

LeetCode(Remove Duplicates from Sorted List) 兩道刪除排序連結串列重複數字

題目要求: Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, ret

leetcode83:刪除排序連結串列重複元素

思想: 由於連結串列是排序的,只要判斷head和head.next的val值是否相等,若相等則head.next = head.next.next 反之head = head.next 為了返回,將head暫存dummy # Definition for singly-

刪除排序連結串列重複的結點

題目是如此的清楚,以至於不會造成誤解。現將要點羅列如下: 連結串列為空,不必多說; 如果恰恰是頭結點與頭結點的後一個重複了,這種情況是可以發生的,那頭結點就要被刪除,另選新的結點作為頭

刪除排序連結串列重複數字 II

2017.11.1 果然一遇到連結串列就剪不清理還亂。一會兒就徹底懵了。 大致思路就是先判斷有沒有重複的, 如果有重複的,就全部刪除 如果沒有重複的,就下一個。 呵呵,道理我都懂啊,我就是寫不出來程式碼啊 /** * Definition for ListNode *

LintCode刪除排序連結串列重複數字 II

public static ListNode deleteDuplicates(ListNode head) { if(head == null || head.next == null) { return head; } el

刪除排序連結串列重複數字 II -LintCode

描述: 給定一個排序連結串列,刪除所有重複的元素只留下原連結串列中沒有重複的元素。 樣例: 給出 1->2->3->3->4->4->5->null,返回 1

lintcode練習-113. 刪除排序連結串列重複數字 II

113. 刪除排序連結串列中的重複數字 II 給定一個排序連結串列,刪除所有重複的元素只留下原連結串列中沒有重複的元素。 樣例 給出 1->2->3->3->4->4

lintcode,刪除排序連結串列重複數字 II

給定一個排序連結串列,刪除所有重複的元素只留下原連結串列中沒有重複的元素。 樣例 給出 1->2->3->3->4->4->5->null,返回 1->2->5->null 給出 1->1-

[Leetcode] 82. 刪除排序連結串列重複元素 II java

 給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 

LeetCode 82 ——刪除排序連結串列重複元素 II

1. 題目 2. 解答 新建一個連結串列,並新增一個哨兵結點,從前向後開始遍歷連結串列。 如果下一個結點的值和當前結點的值相等,則迴圈向後遍歷直到找到一個和當前結點值不相等的結點; 反之,如果下一個結點的值和當前結點的值不相等,此值即為原始連結串列中

LeetCode-82. 刪除排序連結串列重複元素 II

題目 給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 2: 輸入: 1->

82. 刪除排序連結串列重複元素 II

給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1

LeetCode082——刪除排序連結串列重複元素II

題目描述: 知識點:連結串列 思路:三指標遍歷連結串列 為了消除對頭節點的特殊處理,設立虛擬頭節點dummyHead。cur1指標指向當前節點的前一個節點,cur2指標指向當前節點,cur3指標指向當前節點的後一個節點。 只要cur3不為null就持續以下

leetcode 82:刪除排序連結串列重複元素 II

由於是排好序的佇列,所以處理起來相對簡單 ListNode* deleteDuplicates(ListNode* head) { ListNode*l2=new ListNode(0); if(head==NULL) return head; i

*** 82 刪除排序連結串列重複元素II

ListNode *deleteDuplicates(ListNode *head) { if (head == nullptr || head->next == nullptr) return head; ListNode prehead

【LeetCode】82. 刪除排序連結串列重複元素 II

給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 基本思路是第一層迴圈,兩個指標分別指向當前元素和它的前繼,目的是如果有重複,需要刪除當前元素,然後直到當前元素為空 第二層迴圈,兩個指標分別指向當前元素的下一個元素和它的前繼,

leetcode82.刪除排序連結串列重複元素 II

1.題目 給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 2.示例 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 2: 輸入: 1->1->

Leetcode 82:刪除排序連結串列重複元素 II(最詳細解決方案!!!)

給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸

11.11(83. 刪除排序連結串列重複元素-----82. 刪除排序連結串列重複元素 II)

83. 刪除排序連結串列中的重複元素(通過) 思路:略 效率:22.42% 程式程式碼: 居然一次性就通過了,真是太驚喜了 class Solution { public: ListNode* deleteDuplicates(ListNode* head)

LeetCode:刪除排序連結串列重複元素 II

給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 2: 輸入: 1->