83. 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
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
83.从有序列表中移除重复元素
给定一个有序的链表,删除所有重复元素从而让同样的元素只出现一次。
比如:
给定1->1->2,返回1->2。
给定1->1->2->3->3,返回1->2->3。
思路:既然是链表已经是有序的了,那么只需遍历一次即可。遍历时需要考虑当前结点的值与下一结点的值,如果相等就移除下一结点,注意此时要保持当前结点不变,而下一结点变成原来的下下结点。如果值不同,那么只需把两个结点指针都后移即可。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode* p = head;
while (p && p->next){
if (p->val == p->next->val){
p->next = p->next->next;
}
else p = p->next;
}
return head;
}
# 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
"""
p = head
while p and p.next:
if p.val == p.next.val:
p.next = p.next.next
else:
p = p.next
return head