LeetCode - 删除排序链表中的重复元素
日常刷题中!🐵
GitHub链接:
刷题代码都在Exercise库中提交
题目:
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例1🎈 输入:head = [1,1,2] 输出:[1,2] 示例2🎈 输入:head = [1,1,2,3,3] 输出:[1,2,3]
LeetCode链接:
解析:
由于这个是单链表的结构,所以当我们要删除某一个节点时,必须要能找到下一个节点的地址,否则就没法去链接了。那么我们再删除重复节点时,只能一个一个节点的去删除。 核心思想🐵 循环遍历,如果当前节点值等于下一个节点值,则将当前节点链接到下下个节点,跳过相同值的节点。否则,当前节点等于下个节点,向后遍历链表 。 注意🐵 一般遍历链表有两个结束条件,一个是节点为空,一个是节点的下驱指针next为空,要根据不同的情景去判断。
代码实现:
struct ListNode* deleteDuplicates(struct ListNode* head) { //循环遍历,如果当前节点值等于下一个节点值,则将当前节点链接到下下个节点 //跳过相同值的节点 //否则,当前节点等于下个节点,向后遍历链表 struct ListNode* phead = head; if (phead == NULL) { return head; } while (phead->next != NULL) { if (phead->val == phead->next->val) { phead->next = phead->next->next; } else { phead = phead->next; } } return head; }
小结:
对于链表的操作一定要保证其链接性,所以思路会和顺序表的题目有所差异,需要我们大量去练习,拓展我们的思路。
下一篇:
通过geoserver发布地图瓦片数据