《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
来源:互联网 发布:淘宝达人的网址 编辑:程序博客网 时间:2024/06/04 23:32
自己在VS里写了完整代码!! 才知道自己犯的下面第一个错!!
(1)
一直错在39行,在外面的VS软件里才调出来了!!
while(p2->val==p3->val&&p3!=NULL)
p3=p3->next;
这句话这么写,就出错了,如果p3的值是NULL,
进入下一次的while()的条件判断,
会先进行 p2->val==p3->val,这里的 p3->val就会报错了
(2)(好像之前也错过!!)
牛客网上结构体的初始化 是这么写的:
ListNode *newHead=new ListNode(0)
并不是 ListNode *newHead(0);!!!!!!
总算解决了!!
-----------------------牛客网 Code---------------------------------------
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL)return NULL; ListNode* p2=pHead; ListNode* p3=NULL; ListNode *newHead=new ListNode(0),*newp=newHead; //newHead->val=0; // newHead->next=NULL; while(p2!=NULL) { p3=p2->next; if(p3==NULL)//最后一个结点,就不能像32行 可以进行对比 {//链接到新表中 newp->next=p2; newp=newp->next; newp->next=NULL; p2=p2->next; } else { if(p2->val==p3->val) { /*while(p2->val==p3->val&&p3!=NULL) p3=p3->next; if(p3==NULL)p2=NULL; if(p2->val!=p3->val) p2=p3; */ while(p3!=NULL) {if(p2->val==p3->val){p3=p3->next;}else break; } if(p3==NULL)p2=NULL; else { if(p2->val!=p3->val) p2=p3; } } else {//链接到新表中 newp->next=p2; newp=newp->next; newp->next=NULL; //p2=p2->next; p2=p3; } } } return newHead->next; } };
-----------------------VS 软件上调试 Code--------------------------------
#include<iostream>using namespace std; struct ListNode { int val; struct ListNode *next; }*pHead; void creat(ListNode * &pHead){ int a[8]={1,3,3,3,3,5,5,5}; int n=8; //int a[1]={2}; //int n=1; pHead= new ListNode; pHead->val=a[0]; pHead->next=NULL; ListNode *p=pHead; for(int i=1;i<n;i++) { ListNode *t=new ListNode; t->val=a[i]; t->next=NULL; p->next=t; p=p->next; } }void output(ListNode * &pHead){ ListNode *p=pHead; while(p!=NULL) { cout<<p->val; p=p->next; } cout<<endl;} ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL)return NULL; ListNode* p2=pHead; ListNode* p3=NULL; ListNode *newHead=new ListNode,*newp=newHead; newHead->val=-1; newHead->next=NULL; while(p2!=NULL) { p3=p2->next; if(p3==NULL)//最后一个结点,就不能像32行 可以进行对比 {//链接到新表中 newp->next=p2; newp=newp->next; newp->next=NULL; p2=p2->next; } else { if(p2->val==p3->val) { //while(p2->val==p3->val&&p3!=NULL) int k=0; while(p3!=NULL) { if(p2->val==p3->val){p3=p3->next;} else break; } if(p3==NULL)p2=NULL; else { if(p2->val!=p3->val) p2=p3; } } else {//链接到新表中 newp->next=p2; newp=newp->next; newp->next=NULL; // p2=p2->next; p2=p3; } } } return newHead->next; } void main(){ ListNode * pHead=NULL; creat(pHead); ListNode * pH=NULL; pH=deleteDuplication(pHead); output(pH); system("pause");}
好爱奈何 我coding 的动力
0 0
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- 剑指offer-面试题57:删除链表中重复的结点
- 剑指offer--面试题57:删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 剑指offer-面试题57-删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 剑指offer面试题57 删除链表中重复的结点
- 剑指offer面试题[57]-删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 《剑指Offer》学习笔记--面试题57:删除链表中重复的结点
- 【剑指Offer学习】【面试题57:删除链表中重复的结点】
- 剑指Offer系列-面试题57:删除链表中重复的结点
- 《剑指Offer》面试题57:删除链表中重复的节点
- 面试题57:删除链表中重复的结点
- 面试题57:删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 《剑指offer》删除链表中重复的结点
- FFmpeg长时间无响应的解决方法
- java设计模式进阶_state
- 点击UITableView的cell展开收缩
- 企业宣传片如何做?上海宣传片公司拍摄与制作看这里
- 求出现次数最多的数
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- 图论小结
- c++简单整理
- 收集几个移动平台浏览器的User-Agent
- Mybatis极其(最)简(好)单(用)的一个分页插件
- 反反爬虫之见招拆招
- mfc 执行命令
- Twitter登录的集成
- linux下 ls -l 命令显示结果解释