注册 登录
编程论坛 C++教室

关于链表的个小问题!!不吝赐教!!谢谢!!

洪溪 发布于 2010-12-13 13:06, 567 次点击
程序的目的是把两个小的链表连接起来,形成一个新的链表,但连接时出了问题,编译器的提示我觉得没道理啊...真不明白了..想了好久还是想不通...希望看到的你行行好..帮我一下..感激不尽..


#include<iostream>
using namespace std;
template<typename NODETYPE> class List;

template<typename NODETYPE>
class ListNode
{
    friend class  List<NODETYPE>;
    public:
        ListNode(NODETYPE &);        
    private:
        ListNode<NODETYPE> *nextPtr;
        NODETYPE data;
};//链表结点定义

template<typename NODETYPE>
ListNode<NODETYPE>::ListNode(NODETYPE &info )
:data( info),nextPtr(0)
{
}

template<typename NODETYPE>
class List
{
    public:
        List();
        void insertFromFirst(NODETYPE);
        void insertFromLast(NODETYPE);
        void removeFromFirst(NODETYPE &);
        void removeFromLast(NODETYPE &);
        void print();
    private:
        ListNode<NODETYPE> *firstPtr;
        ListNode<NODETYPE> *lastPtr;
};//链表的定义

template<typename NODETYPE>
List<NODETYPE>::List()
{
    firstPtr=lastPtr=0;
}

template<typename NODETYPE>
void List<NODETYPE>::insertFromFirst(NODETYPE values)
{
    ListNode<NODETYPE> *newPtr=new ListNode<NODETYPE>(values);
    if(firstPtr==0)
        firstPtr=lastPtr=newPtr;
    else
    {newPtr->nextPtr=firstPtr;
    firstPtr=newPtr;}
}

template<typename NODETYPE>
void List<NODETYPE>::insertFromLast(NODETYPE values)
{
    ListNode<NODETYPE> *newPtr=new ListNode<NODETYPE>(values);
    if(lastPtr==0)
        firstPtr=lastPtr=newPtr;
    else
    {
        lastPtr->nextPtr=newPtr;
        lastPtr=newPtr;
    }
   
}

template<typename NODETYPE>
void List<NODETYPE>::removeFromFirst(NODETYPE &temp)
{
    ListNode *tempPtr=firstPtr;
    if (tempPtr==lastPtr)
        firstPtr=lastPtr=0;
    else
        firstPtr=firstPtr->nextPtr;   
    temp=tempPtr->data;   
    delete tempPtr;
}

template<typename NODETYPE>
void List<NODETYPE>::removeFromLast(NODETYPE &temp)
{
    ListNode<NODETYPE> *tempPtr=lastPtr;
    ListNode<NODETYPE> *loop=firstPtr;
    if(firstPtr==0)
        firstPtr=lastPtr=0;
    else
    {
        while (loop->nextPtr!=lastPtr)
            loop=loop->nextPtr;        
    }
    lastPtr=loop;
    temp=tempPtr->data;
    delete tempPtr;
}

template<typename NODETYPE>
void List<NODETYPE>::print()
{
    ListNode<NODETYPE> *printPtr;
    printPtr=firstPtr;
        while (printPtr!=0)
        {
            cout<<printPtr->data<<' ';
            printPtr=printPtr->nextPtr;
        }
        cout<<endl;
        
}

void main()
{
    List<char> list1,list2, newlist;
    char a='a',b='b',c;
    list1.insertFromFirst(a);
    list2.insertFromLast(b);
    list1.lastPtr->nextPtr=list2.firstPtr;//...........
    newlist.firstPtr=list1.firstPtr;//....这三行要把两个链表连接起来....
    newlist.lastPtr=list2.lastPtr;//.......
    newlist.print();
   
}
4 回复
#2
niufujun2010-12-13 14:58
来自外部的任何访问类的private都是非法的。把private删除就行,或者两个链表连接部分写成一个类的成员函数实现也行。

#3
laoyang1032010-12-13 17:56
只有本站会员才能查看附件,请 登录

参考一下我写的
#4
洪溪2010-12-17 10:18
回复 楼主 洪溪
电脑坏了好几天现在才修好气死了  靠!!你说的对了!我怎么搞的啊 怎么现在还犯这种无知啊!! 谢谢伙计!!谢谢。。
#5
洪溪2010-12-17 10:26
回复 3楼 laoyang103
我发觉你真行啊 !! 感觉你什么都会。。服啦。。看来要多跟你学两招啦。。谢谢你大侠。。。
1