删除链表重复的元素

image

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* deleteDuplicates(struct ListNode* head){
    struct ListNode* cur = head;
   while((cur != NULL)&&(cur->next != NULL))
   {
       if(cur->val == cur->next->val)
            cur->next=cur->next->next;
        else
            cur=cur->next;
   }
    return head;


}

关键在于链表已按顺序排列,重复元素都为相邻,
指定 cur 指针指向头部 head
当 cur 和 cur.next 的存在为循环结束条件,当二者有一个不存在时说明链表没有去重复的必要了
当 cur.val 和 cur.next.val 相等时说明需要去重,则将 cur 的下一个指针指向下一个的下一个,这样就能达到去重复的效果
如果不相等则 cur 移动到下一个位置继续循环
image

posted @ 2023-02-24 09:39  seekwhale13  阅读(29)  评论(0)    收藏  举报