| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 460 人关注过本帖
标题:大神帮我看看简单的链表哪里错了
只看楼主 加入收藏
宋立鹏
Rank: 2
等 级:论坛游民
帖 子:30
专家分:16
注 册:2012-7-5
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:6 
大神帮我看看简单的链表哪里错了
#include <iostream>
#include "windows.h"
using namespace std;

struct Node
{
    int data;
    Node* next;
};
class List
{
public:
    Node* head;
public:
    List(){head=NULL;};
    void insertList(int aData,int bData);
    void deleteList(int aData);
    void outputList();
    Node* getHead(){return head;}
};
void List::insertList(int aData, int bData)
{
    Node *p,*q,*s;
    s=(Node*)new(Node);
    s->data=bData;
    p=head;
    q=head;
    if(head==NULL)
    {
        head=s;
        s->next=NULL;
    }
    else
if(p->data==aData)
        {
            p->next=s;
            head   =p;
            cout<<"dd"<<endl;
        }
        else
        {
            ///////////////以下为错误出现的地方,我是想在某个节点后面插入一个新的节点,但是老出现错误
                               结果我会贴在后面/////////////////////////
            while(p->data!=aData&&p->next!=NULL)
            {
                p=p->next;
            }
            if(p->data==aData)
            {
                s->next=p->next;
                p->next=s;
            }
            else
            {
                return;
            }
     }
        }
void List::deleteList(int aData)
{
    Node *p,*q,*s;
    /*s=(Node*)new(Node);
    s->data=bData;*/
    p=head;
    if(head==NULL)
        return;
    else
        if(p->data==aData)
        {
            head=p->next;
            delete p;
            cout<<"aa"<<endl;
        }
        else
            while(p->data!=aData&&p->next!=NULL)
            {
                q=p;
                p=p->next;
            }
            if(p->data==aData)
            {
                q->next=p->next;
                delete p;
            }



}
void List::outputList()
{
    Node* current=head;
    while(current!=NULL)
    {
        cout<<current->data<<" ";
        current=current->next;
    }
    cout<<endl;
};
/////////////以下为主函数////////////////
#include <iostream>
#include "List.h"
using namespace std;
void main()
{
    List A,B;
    int data[10]={1,2,3,4,5,6,7,8,9,10};
    A.insertList(0,data[0]);
    A.insertList(data[0],data[1]);
    A.insertList(data[1],data[2]);
    A.insertList(data[2],data[3]);
    A.insertList(data[3],data[4]);
    cout<<"aaa"<<endl;
    A.deleteList(data[2]);
    cout<<"ddd"<<endl;
    A.outputList();
   
}

下面是运行结果
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include public return 
2013-09-28 22:30
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:0 
class Node
{
public:
    Node():next(NULL){}
    int data;
    Node* next;
};
class List
{
public:
    Node* m_head;
public:
    List(){m_head=NULL;}
    void insertList(int aData,int bData)
    {
        Node *p,*q,*s;
        s=(Node*)new Node;
        s->data=bData;
        p=m_head;
        q=m_head;
        if(m_head==NULL)
        {
            m_head=s;
        }
        else
        {
            if(p->data==aData)
            {
                p->next=s;
                m_head =p;
                cout<<"dd"<<endl;
            }
            else
            {
                ///////////////以下为错误出现的地方,我是想在某个节点后面插入一个新的节点,但是老出现错误结果我会贴在后面/////////////////////////
                while(p->data!=aData&&p->next!=NULL)
                {
                    p=p->next;
                }
                if(p->data==aData)
                {
                    //s->next=p->next;// 链表遍历到尾端,p->next应为NULL
                    p->next=s;
                }
                else
                {
                    return;
                }
            }
        }
    }
    void deleteList(int aData)
    {
        Node *p,*q,*s;
        /*s=(Node*)new(Node);
        s->data=bData;*/
        p=m_head;
        if(m_head==NULL) {
            return;
        } else {
            if(p->data==aData)
            {
                m_head=p->next;
                delete p;
                cout<<"aa"<<endl;
            }
            else
            {
                while(p->data!=aData&&p->next!=NULL)
                {
                    q=p;
                    p=p->next;
                }
                if(p->data==aData)
                {
                    q->next=p->next;
                    delete p;
                }
            }
        }
    }
    void outputList()
    {
        Node* current=m_head;
        while(current!=NULL)
        {
            cout<<current->data<<" ";
            current=current->next;
        }
        cout<<endl;
    }
    Node* getHead(){return m_head;}
};


不解释了,自己调戏吧。
2013-09-29 08:45
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
先看看别人正确的做法是怎样的

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-09-29 09:16
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:10 
程序代码:
#include <iostream>
#include "windows.h"
using namespace std;

struct Node
{
    int data;
    Node* next;
};
class List
{
public:
    Node* head;
public:
    List(){head=NULL;};
    void insertList(int aData,int bData);
    void deleteList(int aData);
    void outputList();
    Node* getHead(){return head;}
};
void List::insertList(int aData, int bData)
{
    Node *p,*q,*s;
    s=(Node*)new(Node);
    s->data=bData;
    p=head;
    q=head;
    if(head==NULL)
    {
        head=s;
        s->next=NULL;
    }
  /*  else
/*if(p->data==aData)
        {
            p->next=s;
            head   =p;
            cout<<"dd"<<endl;
        }*/
        else//这里当然包括了(p->data==aData)的情况。
        {
            ///////////////以下为错误出现的地方,我是想在某个节点后面插入一个新的节点,但是老出现错误
                              // 结果我会贴在后面/////////////////////////
            while(p->data!=aData&&p->next!=NULL)
            {
                p=p->next;
            }
            if(p->data==aData)
            {
                s->next=p->next;
                p->next=s;
            }
            else
            {
                return;
            }
     }
        }
void List::deleteList(int aData)
{
    Node *p,*q;
    /*s=(Node*)new(Node);
    s->data=bData;*/
    p=head;
    if(head==NULL)
        return;
    else
        if(p->data==aData)
        {
            head=p->next;
            delete p;
            cout<<"aa"<<endl;
        }
        else
            while(p->data!=aData&&p->next!=NULL)
            {
                q=p;
                p=p->next;
            }
            if(p->data==aData)
            {
                q->next=p->next;
                delete p;
            }



}
void List::outputList()
{
    Node* current=head;
    while(current!=NULL)
    {
        cout<<current->data<<" ";
        current=current->next;
    }
    cout<<endl;
};
/////////////以下为主函数////////////////
#include <iostream>
#include "List.h"
using namespace std;
void main()
{
    List A,B;
    int data[10]={1,2,3,4,5,6,7,8,9,10};
    A.insertList(0,data[0]);
    A.insertList(data[0],data[1]);
    A.insertList(data[1],data[2]);
    A.insertList(data[2],data[3]);
    A.insertList(data[3],data[4]);
    cout<<"aaa"<<endl;
    A.deleteList(data[2]);
    cout<<"ddd"<<endl;
    A.outputList();
   
}
在末结点上添加数据,主要问题是有重复的ELSE 逻辑问题。

www.qunxingw.wang
2013-09-29 10:02
宋立鹏
Rank: 2
等 级:论坛游民
帖 子:30
专家分:16
注 册:2012-7-5
收藏
得分:0 
回复 4楼 qunxingw
同意你的看法,多谢
2013-09-29 13:16
zyy_hz
Rank: 2
等 级:论坛游民
帖 子:8
专家分:24
注 册:2013-2-18
收藏
得分:10 
void List::insertList(int aData, int bData)
{
    Node *p,*q,*s;
    s=(Node*)new(Node);
    s->data=bData;
//s->next = NULL;//在这个地方要初始化下next指针为NULL
if(p->data==aData)
        {
            p->next=s;
            head   =p;
            //这个地方没有初始化next指针为NULL,这样可能为野指针。
            cout<<"dd"<<endl;
        }
2013-09-29 13:56
zyy_hz
Rank: 2
等 级:论坛游民
帖 子:8
专家分:24
注 册:2013-2-18
收藏
得分:0 
我在redhat下用g++编译是没问题的。运行结果是
[root@localhost test]# ./a.out
dd
aaa
ddd
1 2 4 5
[root@localhost test]#
2013-09-29 14:41
快速回复:大神帮我看看简单的链表哪里错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021408 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved