剑指offer 57 - 删除链表中重复的节点

来源:互联网 发布:mac自动登入灰色 编辑:程序博客网 时间:2024/06/09 22:06


#include <iostream>using namespace std;struct ListNode{int nValue;ListNode *nNext;};ListNode * createListNode( int a[],int length){   if(length == 0 )return NULL;   ListNode *head = NULL;   ListNode *rear = head;   for(int i=0;i<length;i++)   {   ListNode *tmp =new ListNode[sizeof(ListNode)];   tmp->nValue = a[i];   if(rear == NULL)        head = tmp;   else   rear->nNext = tmp;        tmp->nNext = NULL;         rear =tmp;   }  return head;}void deleteDuplication(ListNode **head){if( head == NULL  || *head ==NULL)return ;ListNode *pHead = *head;ListNode *Pre =  NULL;  //重要点while(pHead !=NULL){bool  needDelete =false;ListNode *pNext =  pHead->nNext;if(  pNext!=NULL && pHead->nValue ==pNext->nValue )  //出现重复             needDelete =true;if( !needDelete ){Pre = pHead;pHead  =pHead->nNext;}else{int value = pNext->nValue;    ListNode *pTobeDelete = pHead;while(pTobeDelete !=NULL && value ==pTobeDelete->nValue)  { pNext = pTobeDelete->nNext;  delete pTobeDelete; pTobeDelete = NULL; pTobeDelete = pNext ;     }if(Pre == NULL)   //首节点 *head =pNext;else  Pre->nNext = pNext;pHead  = pNext; }}}void printListNode(ListNode *head){     while( head !=NULL){cout<<head->nValue<<" ";head = head->nNext;}cout<<endl;}void main(){ListNode *head = NULL,  *startNode = NULL;int a[] ={1,1,2,3,3,3,4,4,5,5};head = createListNode(a ,sizeof(a)/sizeof(int));printListNode(head); deleteDuplication(&head);printListNode(head);deleteDuplication(NULL);}


0 0
原创粉丝点击