Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3.
题意:对给定的排好序的链表,删除重复的元素,只留下出现一次的元素
思路:当元素和下一个元素比对,如果相同,当前元素的next指针指向下一个元素的next指针。
Language : c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode* cur = (int *)malloc(sizeof(struct ListNode));
cur = head;
while(cur != NULL){
while(cur->next != NULL && cur->val == cur->next->val){
cur->next = cur->next->next;
}
cur = cur->next;
}
return head;
}
Language : cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* cur = head;
while(cur != NULL){
while(cur->next != NULL && cur->val == cur->next->val){
cur->next = cur->next->next;
}
cur = cur->next;
}
return head;
}
};
Language : python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
now = head
while head:
while head.next and head.val == head.next.val:
head.next = head.next.next
head = head.next
return now