标题:应该是小白问题
只看楼主
philomochi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-1-13
结帖率:0
已结贴  问题点数:20 回复次数:3 
应该是小白问题
数据结构的作业,将一个链式堆栈里的元素倒置,不知道怎么就是报错

#include<iostream>
using namespace std;

typedef struct Lnode {               //链表节点
    int data;
    Lnode *next;
}Lnode;

class Llist {                        //链表类
private:
    Lnode *head, *tail;
public:
    Llist(int x);
    void ReverseLinkList();
    void show();
};
Llist::Llist(int x) {
    Lnode *nitem;
    head = new Lnode;
    head->next = NULL;
    tail = head;
    for (int i = 1; i <= x; i++) {
        nitem = new Lnode();
        nitem->data = i;
        tail->next = nitem;
        tail = nitem;
    }
}
void Llist::show() {
    Lnode *p = head->next;
    while (p != NULL) {
        cout << p->data << " ";
        p = p->next;
    }
    cout << endl;
}
void Llist::ReverseLinkList() {                    //将第一个节点提取出来插入尾部,直到原本的尾节点为止
    if (head->next = NULL) {
        cout << "链表为空" << endl; return;
    }
    Lnode *tem = head->next, *ptail = tail;
    while (tem != ptail) {
        getchar();
        head->next = tem->next;
        tail->next = tem;
        tail = tem;
        tem = head->next;
    }
}

int main()
{
    Llist L1(5);
    L1.show();

    L1.ReverseLinkList();
    L1.show();

    return 0;
}
求救!

搜索更多相关主题的帖子: private include public 元素 
2016-01-13 22:21
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
得分:0 
程序代码:
#include<iostream>
using namespace std;

typedef struct Lnode {               //链表节点
    int data;
    Lnode *next;
}Lnode;

class Llist {                        //链表类
private:
    Lnode *head, *tail;
public:
    Llist(int x);
    void ReverseLinkList();
    void show();
};
Llist::Llist(int x) {
    Lnode *nitem;
    head = new Lnode;
    head->data=0;///原码没有读入第一个节点的data值
    head->next = NULL;
    tail = head;
    for (int i = 1; i <= x; i++) {///注意,此处完成后可一共有x+1个节点,写法不够简单明朗
        nitem = new Lnode();
        nitem->data = i;
        nitem->next=NULL;
        tail->next = nitem;
        tail = nitem;
    }
}
void Llist::show() {
    Lnode*p=head;///原码这里是有问题的,会浪费掉第一个没给值的节点,一不注意可能不会发现
     while (p->next!= NULL){
        cout << p->data << " ";
        p = p->next;
    }
    cout<<p->data;
    cout << endl;
}
void Llist::ReverseLinkList() {                    //将第一个节点提取出来插入尾部,直到原本的尾节点为止
    //本题经改过后不可能为空节点,如果想达到可以为空节点,创造链表的过程不是你这样的。
    Lnode *head1=NULL,*p1=NULL,*p2=NULL,*flag=NULL;

    if(head==tail) return;//只有一个节点
    else if(head->next==tail)//有两个节点
        {
            p2=head;
            head=tail;
            head->next=p2;
            tail=p2;
            tail->next=NULL;
        }
        else
        {
            head1=tail;
            p1=head;
            while(head->next!=tail)//未倒置节点多于两个时
            {
                while(p1->next->next!=NULL)
                {
                    p1=p1->next;
                }
                flag=p1;
                p1=p1->next;
                p1->next=flag;
                flag->next=NULL;
                tail=flag;
                p1=head;
            }
            flag->next=p1;
            p1->next=NULL;
            head=head1;
    }
}

int main()
{
    Llist L1(0);
    L1.show();
    L1.ReverseLinkList();
    L1.show();
    cout<<endl;
    Llist L2(1);
    L2.show();
    L2.ReverseLinkList();
    L2.show();
    cout<<endl;
    Llist L3(5);
    L3.show();
    L3.ReverseLinkList();
    L3.show();
    return 0;
}


[此贴子已经被作者于2016-1-14 11:02编辑过]

2016-01-14 10:41
philomochi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-1-13
得分:0 
回复 2楼 wengbin
谢谢!你不说我还没发现有问题
2016-01-14 16:48
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
得分:20 
这娃是新注册一个号,拿到结果就跑的嘛
2016-01-15 10:52



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




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

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