题解 | #删除链表中重复的结点#
删除链表中重复的结点
http://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
- 刚开始的dummynode一定不要声明成指针类型。
- cur用来链接链表。
- head用来做备份,并且操作的就是head
- head->next->val 之类的操作出来的时候,记得 head->next 不为空。
- 要注意一些head = head->next 是可同时处理很多事情的。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
map<int,ListNode*> mp;
ListNode* deleteDuplication(ListNode* pHead) {
ListNode node(0);
ListNode* cur = &node;
ListNode* head = pHead;
while(head){
if(head->next== NULL || head->val != head->next->val){//避免下一个节点相等,并且到最后一个节点的时候进来。
cur->next = head;
cur = cur->next;
}
while(head->next!=NULL && head-> val == head -> next-> val) head = head->next;
head = head->next;//既可以指向下一个节点的同时,有可以接着处理上述的。
}
cur->next = NULL;
return node.next;
}
};剑指Offer 文章被收录于专栏
剑指offer的解析结合
查看3道真题和解析
联想公司福利 1518人发布
