链接:删除排序链表中的重复元素
描述:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
举例:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
思路:思路很清晰就不多提,主要是看到官方题解之后产生了一点疑惑。想着:好像只改变了cur,没改变head,但最后返回的是head。主要问题就在于指针方面的知识掌握的还不太好。以此来记录以下。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head){
return head;
}
ListNode* cur = head;
while(cur->next){
if(cur->val == cur->next->val){
cur->next = cur->next->next;
}
else{
cur = cur->next;
}
}
return head;
}
};
笔记:head是一级指针,要想改变head就得使用二级指针。
这个代码把第一个删了,返回的head,但head改变了,因为我用二级指针指向了head这个一级指针的地址,然后*p(解引用),再等于其他的一级指针,才能改变head这个一级指针。此时的p就是二级指针。
删了前两个。