刪除鏈表中重復的結點
阿新 • • 發佈:2017-08-19
describe image urn ati lis while null number nod
題目描述
在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理後為 1->2->5 1 遞歸/* 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; while(pHead!=NULL && pHead->next!=NULL && pHead->val==pHead->next->val) { while(pHead!=NULL &&pHead->next!=NULL && pHead->val==pHead->next->val) { pHead=pHead->next; } pHead=pHead->next; } if(pHead!=NULL) { pHead->next=deleteDuplication(pHead->next); } return pHead; } };
2.
/* 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 *HeadNode = new ListNode(-1); HeadNode ->next = pHead; ListNode *pveNode = HeadNode; ListNode *p = HeadNode->next; ListNode *nextNode = p->next; while(p!=NULL && p->next!=NULL){ if(p->val == nextNode->val){ while(nextNode->next != NULL && nextNode->val == nextNode->next->val){ nextNode = nextNode->next; } p=nextNode->next; nextNode = p->next; pveNode->next = p; }else{ pveNode = p; p=nextNode; nextNode = nextNode->next; } } return HeadNode->next; } };
思路3: 1.加一個頭結點 2.兩個臨時指針p,q 3.找前後不相等的節點
class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if (pHead == NULL || pHead->next == NULL) return pHead; /*---------先為鏈表創建一個頭結點---------*/ int firstNumber = pHead->val; //假設我的頭結點數值為-1 int myFirst = -1; //萬一鏈表的頭結點也為-1,那麽我就改成-2 if (myFirst == firstNumber) { myFirst = -2; } ListNode *head = new ListNode(myFirst); head->next = NULL; head->next = pHead; ListNode *p = head; ListNode *q = head->next; while (q) { while (q->next && (q->next->val == q->val)) { q = q->next; } if (p->next != q) { q = q->next; p->next = q; } else { p = q; q = q->next; } } //返回的時候,註意去掉頭結點(自己創建的輔助節點) return head->next; } };
http://blog.csdn.net/eversliver/article/details/52234333
刪除鏈表中重復的結點