#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;}
新闻热点
疑难解答