原题:
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
.
本题就是要删除所有的重复的数字,很简单,看有的人做的是看一个node是否和前一个相等,要是相等就删除,这得判断n次啊,直接用俩指针指着不就行了么。。。ok,我的解题思路:
1用一个指针current指向某个数字区间的第一个数字,然后判断current是否和head相等,如果不等就把head加入新的链表;如果相等,就把head指向next
2 小技巧,最开始把result指向一个new 的node,然后依次向后面加node,最后返回result->next就行
代码(88ms):
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
ListNode * result = new ListNode(-1);
ListNode * tail = result;
ListNode * current = NULL;
while(head){
if(current==NULL || head->val != current->val){
ListNode *node = new ListNode(head->val);
current=head;
tail->next = node;
tail=tail->next;
}
head = head->next;
}
return result->next;
}
};