关闭

《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!

194人阅读 评论(0) 收藏 举报
分类:
自己在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
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【剑指Offer学习】【面试题57:删除链表中重复的结点】

题目:在一个排序的链表中,如何删除重复的结点?解题思路  解决这个问题的第一步是确定删除的参数。当然这个函数需要输入待删除链表的头结点。头结点可能与后面的结点重复,也就是说头结点也可能被删除,所以在链...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-12 07:24
  • 2228

剑指offer_面试题16_反转链表(两种方法)

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 在解决问题前,先想好测试用例: 1、功能测试:输入的链表含有多个结点,链表中只有一个结点 2、特殊输入测试:头结点...
  • jwentao01
  • jwentao01
  • 2015-08-10 11:00
  • 1949

【剑指Offer学习】【所有面试题汇总】

剑指Offer学习  剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流!目录第...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-15 07:26
  • 18307

【剑指Offer】面试题57:删除链表中重复的结点

一:题目描述 在一个排序的链表中,如何删除重复的结点? 如  1->2->3->3->4->4->5 删除重复的结点后链表变成: 1->2->5 二:解题思路 如果当前节点的值与下...
  • u010059070
  • u010059070
  • 2017-08-06 11:55
  • 134

剑指offer 面试题57 删除链表中重复的结点

题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5总结如下: 1.再次...
  • yxccc_914
  • yxccc_914
  • 2016-12-18 16:56
  • 263

剑指offer 面试题57 删除链表中重复的结点

剑指offer 面试题57 删除链表中重复的结点 题目: 在一个排序的链表中,如何删除重复的结点? 例如,链表 1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5, ...
  • liyazhou0215
  • liyazhou0215
  • 2017-06-18 15:31
  • 296

【剑指Offer】面试题57:删除链表中重复的结点

一:题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 二:解题...
  • u010059070
  • u010059070
  • 2017-07-17 15:45
  • 109

面试题57:删除链表中重复的结点

算法思想:方法一,递归实现。 public class Solution {     public ListNode deleteDuplication(ListNode pHead) {     ...
  • ddd_1206
  • ddd_1206
  • 2017-07-16 16:51
  • 90

剑指offer--面试题18:删除链表的结点

#include #include struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* C...
  • u010726692
  • u010726692
  • 2017-07-14 20:33
  • 89

剑指Offer:面试题15——链表中倒数第k个结点(java实现)

问题描述 输入一个链表,输出该链表中倒数第k个结点。(尾结点是倒数第一个) 结点定义如下:public class ListNode { int val; ListNode nex...
  • lilianforever
  • lilianforever
  • 2016-07-06 15:50
  • 288
    个人资料
    • 访问:14220次
    • 积分:395
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:9篇
    • 译文:4篇
    • 评论:1条
    最新评论