您的位置:首页 > 其它

[LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项

2018-03-14 05:52 435 查看

Given a sorted linked list, delete all duplicates such that each element appear only once.

Example 1:

Input: 1->1->2
Output: 1->2

Example 2:

Input: 1->1->2->3->3
Output: 1->2->3

移除有序链表中的重复项,返回新链表。定义1个指针指向链表的第一个元素,然后第一个元素和第二个元素比较,如果重复,则删掉第二个元素,如果不重复,指针指向第二个元素。

Java:

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) return head;
ListNode c = head;
while (c.next != null) {
if (c.val == c.next.val) {
c.next = c.next.next;
} else {
c = c.next;
}
}
return head;
}
}  

Python:

class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
cur = head
while cur:
runner = cur.next
while runner and runner.val == cur.val:
runner = runner.next
cur.next = runner
cur = runner
return head

def deleteDuplicates2(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head: return head
if head.next:
if head.val == head.next.val:
head = self.deleteDuplicates(head.next)
else:
head.next = self.deleteDuplicates(head.next)
return head 

Python: wo

class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return None

dummy = ListNode(0)
dummy.next = head

while head and head.next:
if head.val == head.next.val:
head.next = head.next.next
else:
head = head.next

return dummy.next   

C++:

class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
if (!head || !head->next) return head;

ListNode *start = head;
while (start && start->next) {
if (start->val == start->next->val) {
ListNode *tmp = start->next;
start->next = start->next->next;
delete tmp;
} else start = start->next;
}
return head;
}
};

  

类似题目:

[LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项 II

[LeetCode] 19. Remove Nth Node From End of List 移除链表倒数第N个节点

[LeetCode] 203. Remove Linked List Elements 移除链表元素

 

All LeetCode Questions List 题目汇总

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐