首页 > 学院 > 开发设计 > 正文

单链表反转

2019-11-06 06:58:42
字体:
来源:转载
供稿:网友
#ifndef _SLIST_H#define _SLIST_H#include <iostream>using namespace std;template<class T>struct Node{    T data;    Node* next;    Node(T data):data(data),next(0){}    ~Node(){next=0;}};template<class T>class Slist{public:    Node<T>* head;    Slist()    {        head = new Node<T>(0);    }    ~Slist()    {    }    //头插法    void insert(T data)    {        Node<T>* node = new Node<T>(data);        Node<T>* pnode = head->next;        head->next = node;        node->next = pnode;    }    //打印单链表    void PRint(const string& s)    {		cout << s << endl;        Node<T>* p = head->next;        while(p)        {            cout << p->data << "/t";            p = p->next;        }        cout << endl;    }    //单链表反转    void reverse()    {        //如果链表为空,直接返回        if(head->next==NULL) return;        Node<T> *p,*q,*r;        //第一个节点        p = head->next;        //第二个节点         q = p->next;        //第一个节点为新的末尾节点        p->next = NULL;        //遍历,各个节点的next指针反转        while(q)        {            r = q->next;            q->next = p;            p = q;            q = r;        }        //新的第一个节点为原末尾节点        head->next = p;    }};#endif
#include<iostream>#include<string.h>#include "slist.h"using namespace std;int main(int argc,char* argv[]){    Slist<int> s;    s.insert(5);    s.insert(7);    s.insert(8);    s.insert(16);    s.insert(2);    s.print("原链表:");    s.reverse();    s.print("反转后:");    return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表