大一學C語言的時候就沒有學好鏈表,對鏈表一直都比較害怕。這一週芳芳決定直面自己的恐懼,從鏈表開始搞起。
1.題目描述
給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。
示例 1:
輸入: 1->1->2
輸出: 1->2
示例 2:
輸入: 1->1->2->3->3
輸出: 1->2->3
2.代碼實現(C語言)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode* p=head;
if (head==NULL)
{
return NULL;
}
while(p->next!=NULL)
{
if (p->val==p->next->val)
{
p->next=p->next->next;
}
else
{
p=p->next;
#pre->next=p;
}
}
return head;
}
3.思路分析
這個題沒有什麼算法思想,問題在於如何使用鏈表表達。首先將頭指針給一個p指針,這個p指針指向鏈表,然後比較p和p->next的數值是否相同,同則刪除相同的的值p->next,不同則接着遍歷。這裏我有一個疑惑,那麼就是head賦值給p之後p和head應該是是同步變化的。應該是指針部分的問題,想清楚來填坑。