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
.
对于给定排序链表进行去重处理。
1)对于空链表或者只有一个节点的链表不存在重复的问题,故可直接返回。
2)循环条件,当节点为最后一个节点,则无需继续比较了。因为之前的比较是当前节点和后一节点进行的。所以最后一个节点已经参与过比较了。无需继续。
3)若当前节点值等于后一节点值时,为*list赋值下一个节点即可。并及时释放删除节点的内存,防止出现内存泄漏。
4)若值不相等,list指向下个next即可。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head)
{
if ( head == NULL || head->next == NULL )
{
return head;
}
struct ListNode **list = &head;
while ( (*list)->next != NULL )
{
if ( (*list)->val == (*list)->next->val )
{
struct ListNode *delete = *list;
(*list) = (*list)->next;
free(delete);
}
else
{
list = &(*list)->next;
}
}
return head;
}
1)*list作为头节点出现,表示头节点。
2)*list作为其他节点时,*list具有两重意思。一是代表当前节点,二是对上一节点next的解引用。故为*list赋值即为给上一节点的next的赋值。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。