qq_42295590
小小小小菜鸡
2018-06-10 06:26
采纳率: 100%
浏览 788

问题简单,概念疑惑,求大神

图片说明
我想要这个题的完整解答。我自学c++和数据结构,无法理解链表,每次使用链表时都要自己创建,自己写函数输入输出?没有现成的函数?工具书上的源代码只是一个例子?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • dabocaiqq
    dabocaiqq 2018-06-10 06:36
    已采纳
     #include "stdio.h"
    
    struct ListNode {
        int val;
        struct ListNode *next;
    };
    
    ListNode* ReverseList(ListNode* pHead) {
            ListNode* newh = NULL;
            ListNode* p = pHead;
            while(p)
            {
                ListNode* tmp = p -> next;
                p -> next = newh;
                newh = p;
                p = tmp;
            }
            return newh;
        }
    
    void PrintList(ListNode* pHead) {
            while (pHead)
            {
                printf("%d ", pHead->val);
                pHead = pHead->next;
            }
            printf("\n");
        }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        ListNode p5; p5.val = 5; p5.next = NULL;
        ListNode p4; p4.val = 4; p4.next = &p5;
        ListNode p3; p3.val = 3; p3.next = &p4;
        ListNode p2; p2.val = 2; p2.next = &p3;
        ListNode p1; p1.val = 1; p1.next = &p2;
        PrintList(&p1);
        ListNode* newlist = ReverseList(&p1);
        PrintList(newlist);
        return 0;
    }
    
    点赞 评论
  • dabocaiqq
    dabocaiqq 2018-06-10 06:37

    图片说明
    运行结果如图

    点赞 评论
  • dabocaiqq
    dabocaiqq 2018-06-10 06:40

    稍微解释下这个程序的原理:
    有链表 1->2->3->4->5->NULL
    我们遍历它,创建新的链表,每次都把原来的链表节点插入新链表的头上。
    第一次循环
    newh是 1->NULL
    第二次循环
    newh是 2->1->NULL
    第三次循环
    newh是 3->2->1->NULL
    第四次循环
    newh是 4->3->2->1->NULL
    第五次循环
    newh是 5->4->3->2->1->NULL
    然后返回newh

    点赞 评论
  • dabocaiqq
    dabocaiqq 2018-06-10 06:42

    完整的代码:https://download.csdn.net/download/dabocaiqq/10470252
    如果回答满意,请点我回答右边的采纳,谢谢。

    点赞 评论
  • qq_37416556
    alaboboy 2018-06-10 06:48

    话说你给的题比较适合用”栈“来实现
    现成的函数的话stack.h头文件可以试着学着用一下
    但是还是建议你自己编,毕竟编完之后自己用运用要比用库函数熟练得多
    下面是用现编linknode和push方法解题代码

     #include <iostream>
    #include <conio.h>
    using namespace std;
    template <class T>
    class LinkNode
    {
    public:
        T data;
        LinkNode<T>*prev;
        LinkNode<T>*next;
        LinkNode(const T&el = NULL,LinkNode<T>*ptr = 0,LinkNode<T>*pt = 0)
        {
            data=el;
            prev=ptr;
            next=pt;
        };
    };
    template <class T>
    class LinkStack
    {
    private:
        LinkNode <T> *top;
        LinkNode <T> *rear;
    
    public:
        LinkStack()
        {
            top=rear=new LinkNode<T>();
        }
        ~LinkStack(){
        Clear();}
        void Clear()
        {
            while (top != rear)
            {
                LinkNode <T> *tmp =top;
                top=top->prev;
                delete tmp;
    
            }
    
        }
        bool Push(const T item)
        {
    
            LinkNode <T> *tmp =new LinkNode<T>(item,top);
            top->next=tmp;
            top=tmp;
            return true;
    
        }
        bool Pop(T & item)
        {
            LinkNode<T> *tmp;
            if (top==rear)
            {
                return false;
    
            }
            item = top->data;
            tmp=rear->next;
            delete rear;
            rear =tmp;
            return true;
        }
        void print()
        {
            LinkNode<T> *tmp =top;
            while(tmp!=rear)
            {
                cout<<tmp->data<<"  ";
                tmp=tmp->prev;
            }
                cout<<endl;
        }
    };
    int main()
    {int n,i,c;
    cout<<"输入n"<<endl;
    cin>>n;
        int aa;
    LinkStack <int>a[10];
    for(i=0;i<n;i++)
    {
    cin>>c;
    if(c>=0 && c<10)
    a[c].Push(c);
    else
    {
        cout<<"第"<<i+1<<"次输入错误,算作无效输入"<<endl;
        i--;
    }
    }
    
    LinkStack <int>b;
    for(i=9;i>=0;i--)
    {a[i].print();
        while(a[i].Pop(c))
        b.Push(c);
    }
    b.print();
        getch();
    }
    
    

    输入:5(数字数目) 1 2 3 4 5
    输出:倒序及正序字符串图片说明

    点赞 评论

相关推荐