标题:链表错误 求大神指点
只看楼主
宋立鹏
Rank: 2
等 级:论坛游民
帖 子:30
专家分:16
注 册:2012-7-5
结帖率:85.71%
已结贴  问题点数:20 回复次数:1 
链表错误 求大神指点
程序代码:
//节点类定义
#ifndef NODE_H_
#define NODE_H_

#include <iostream>
#include <cstdlib>

template<typename T> class LinkList;
template<typename T>
class Node
{
public:
    friend class LinkList<T>;
public:
    T value;
    Node<T>* next;
public:
    //Node(NULL):next(NULL){NULL;};
    Node(){next=NULL;}
    Node(const T& T1){value=T1,next=NULL;};
    T& GetValue(void){return value;}
    Node<T>* GetNext(){return next;}

};
#endif

//链表类定义
#include <iostream>
#include "Node.h"
using namespace std;

template <typename T>
class LinkList
{
private:
    Node<T>* p_Head;
public:
    LinkList(void);
    ~LinkList(void);
    void clear(void);
    T& visit(size_t pos);
    void Insert(const size_t pos,const T& value);
    void add(const T& value);
    size_t getLengh(void) const;
    void remove(const size_t pos);
    size_t search(const T& value0) const;


};

template <typename T>
LinkList<T>::LinkList(void)
{
    p_Head=new Node<T>();
}
template <typename T>
LinkList<T>::~LinkList(void)
{
    clear();
    delete p_Head;
}
template <typename T>
void LinkList<T>::clear()
{
    while(!p_Head->next)
    {
        p_Head=p_Head->next;
        delete p_Head->next;
    }

       
}
template <typename T>
T&  LinkList<T>::visit(size_t pos)
{
    Node<T>* prev=p_Head;
    for(int i=0;i<pos+1&&prev!=NULL;i++)
    {
        prev=prev->next;
    }
    return prev->value;
}
template <typename T>
void LinkList<T>::Insert(const size_t pos, const T &value)
{
    Node<T>* prev=p_Head;
    Node<T>* newlist=new Node<T>(value);
    for(int j=0;j<pos&&prev!=NULL;j++)
    {
        prev=prev->next;
    }
    prev->next=newlist->next;
    newlist->next=prev->next->next;
    

}
template <typename T>
void LinkList<T>::add(const T &value)
{
   
    Node<T>* prev=p_Head;
   
    while(prev!=NULL)
    {
        prev=prev->next;
    }
   
    Node<T>* newlist=new Node<T>(value);   
    newlist->next=prev->next;   //出现错误的地方,不知道为什么
    prev->next=newlist;


}
template <typename T>
size_t LinkList<T>::getLengh() const
{
    int i=0;
    Node<T>* prev=p_Head;
    while(prev->next!=NULL)
    {
        prev=prev->next;
        i++;
    }
    return i;

}
template <typename T>
void LinkList<T>::remove(const size_t pos)
{
    Node<T>* prev=p_Head;
    for(int i=0;i<pos&&prev!=NULL;i++)
    {
        prev=prev->next;
    }
    Node<T>* savelist=prev->next;
    prev->next=prev->next->next;
    delete savelist;

}
template <typename T>
size_t LinkList<T>::search(const T &value0) const
{
    Node<T>* prev=p_Head;
    int i=0;
    while(prev->value!=value0)
    {
        prev=prev->next;
        i++;
    }
    return i;

}
//主函数
#include "LinkList.h"
#include <iostream>
using namespace std;

void main()
{
    //cout<<"nihao"<<endl;
    int num=10;
LinkList<int> link;
link.add(1);
link.add(2);
link.add(3);
link.add(5);
link.add(100);
cout<<link.getLengh()<<endl;



}

错误在add函数里  已经标明错误之处




搜索更多相关主题的帖子: include public friend return names 
2014-03-29 22:16
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:20 
void LinkList<T>::add(const T &value)
{
   
    Node<T>* prev=p_Head;
   
    while(prev!=NULL)
    {
        prev=prev->next;
    }

   
    Node<T>* newlist=new Node<T>(value);   
    newlist->next=prev->next;   //出现错误的地方,不知道为什么
    prev->next=newlist;


}

你看红色的代码?推出循环的时候,prev 就等于null了。你出错的那句:newlist->next=prev->next;

你访问null的next?!直接崩溃

改成这样吧
    while(prev->next!=NULL)
    {
        prev=prev->next;
    }
   
    Node<T>* newlist=new Node<T>(value);   
    newlist->next = null;
    prev->next=newlist;

我行我乐
我的博客:
http://blog.yuccn. net
2014-03-30 13:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-429377-1-1.html




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

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