/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL) return pHead; ListNode *Head = new ListNode(0);//建一个空的头指针 Head->next=pHead; ListNode* p=Head->next;//p为向后移动的指针 ListNode* pf=Head;//pf指向关键字的前一个,方便删除重复指针 int number;//判断是否重复的关键字
while(p->next) { number=pf->next->val; p=p->next; if(p->val==number&&p!=NULL) { while(p->next!=NULL&&p->next->val==number) { p=p->next; } pf->next=p->next; if(p->next!=NULL) p=p->next; } else{ pf=pf->next; } } return Head->next; }};
转载于:https://www.cnblogs.com/yuanch2019/p/11583413.html
相关资源:c 笔试题汇总 ①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下: