思路:
首先考虑链表为空时,直接返回头结点
然后创建一个指向头结点的指针current来遍历整个链表
挨个比较当前结点和当前结点的下一个,相同就将后一个删除
注意:这里的链表是按照升序排列的,也就是说相同的是挨着的,我一开始把这点忽略了
不相同后继续向下遍历
/**
* Definition for singly-linked list.
* struct ListNode { 链表定义
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
//链表为空时,直接返回头结点
if(head == NULL)
{
return head;
}
struct ListNode *current = head;//使用current来遍历整个链表
while(current !=NULL && current->next != NULL)//确保当前结点以及下一个结点是有效的
{
if(current->val == current->next->val)
{
struct ListNode *temp = current->next;//将临时指针指向要删除的结点
current->next = temp->next;//将当前结点的next指向下一个结点的next,跳过被删除结点
free(temp);
}
else current = current->next;
}
return head;
}
今日刷题小结:
读题不仔细,老是粗心,写代码一定要标上注释,更有助于理解