题目链接 删除排序链表中的重复元素
题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
解题思路
就是一个链表的基本操作,目前还不太会,等学习完了再来一个链表基本操作的总结。(还有一个问题就是,不动为什么要再弄一个ptr来执行删除操作,最后在返回head,直接用head的话好像不行)
目前以弄清楚为什么用head操作不行,因为这里是一个指针,当操作完后,head指针已经移到最后面的地址上,而借用ptr操作后,head还是指向的最开始,这样就能将整个序列输出。
程序代码
c++
/**
* 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) {
if( head == NULL ) return head;
ListNode* ptr{ head };
while( ptr->next != NULL ){
if( ptr->next->val == ptr->val ) {
ListNode* p=ptr->next;
ptr->next=p->next;
delete p;
}
/*这里的操作相当于把指针ptr移动到next的next,
然后把p指针所在的格子(或者地址)delete掉,
昨天问了学姐,相当于把这个p打上了一个标记,
下次再路过这里的时候,就不读取这个地址的内容,大概是这个意思
*/
else ptr=ptr->next;
}
return head;
}
};
心得
似懂非懂了链表的删除操作(目前只是记住了可以这么做),好吧,其实还不太懂这个原理,为啥把程序中的p删掉之后,就把原来的给删掉了,我再去翻翻博客找找。
(3.8日已更新当时不太会的内容)