本文共 940 字,大约阅读时间需要 3 分钟。
本系列文章已全部上传至我的github,地址:
欢迎大家关注我的新浪微博, 欢迎转载,转载请注明出处
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.
题目大意:删除一个链表中重复的节点,注意这里重复的节点需要保留一个。与不同之处就在于此!
解题思路:用一个指针p遍历整个链表,每次遍历到一个节点,就创建一个临时指针ptmp往后查找与它相同的节点,直到找到一个与它不同的节点,然后把p的next指向ptmp,再让p从ptmp向后继续遍历。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* deleteDuplicates(ListNode* head) { ListNode* p = head; while(p!=NULL) { ListNode* pnext = p; while(pnext!=NULL&&pnext->val==p->val) { //一直往后查找,知道找到一个不相同的节点 pnext=pnext->next; } p->next = pnext;//将p的next指向pnext p = pnext;//从pnext继续向后遍历 } return head; }};