1. 程式人生 > >【一次過】Lintcode 112:刪除排序連結串列中的重複元素

【一次過】Lintcode 112:刪除排序連結串列中的重複元素

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

樣例

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

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

解題思路:

    非常簡單,用一個指標currentNode與他的下一個元素兩者的值進行比較,若相同則刪除後一個元素,若不同則繼續遍歷。

/**
 * Definition of singly-linked-list:
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *        this->val = val;
 *        this->next = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param head: head is the head of the linked list
     * @return: head of linked list
     */
    ListNode * deleteDuplicates(ListNode * head)
    {
        // write your code here
        if(head == NULL) return NULL;
        
        ListNode * currentNode = head;
        while(currentNode->next != NULL)
        {
            if(currentNode->val != currentNode->next->val)
                currentNode = currentNode->next;
            else
                currentNode->next = currentNode->next->next;
        }
        
        return head;
    }
};

JAVA程式碼:

/**
 * Definition for ListNode
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */

public class Solution {
    /**
     * @param head: head is the head of the linked list
     * @return: head of linked list
     */
    public ListNode deleteDuplicates(ListNode head) {
        // write your code here
        if(head == null)
            return null;
        
        ListNode node = head;
        
        while(node.next != null){
            if(node.val == node.next.val)
                node.next = node.next.next;
            else
                node = node.next;
        }
        
        return head;
    }
}