一个简单的单链表逆置程序 /* author:star Data:2011.04.11 一个简单的单链表逆置程序 */ #include<iostream> #include<stdio.h> #include<malloc.h> using namespace std; typedef char ElemType; typedef int Status; #define ERROR 0 #define OK 1 #define OVERFLOW 0 typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; void InitList( LinkList &L ) {//创建一个带头结点的空链表 L = ( LinkList ) malloc ( sizeof( LNode ) ); if ( !L ) exit( OVERFLOW ); L ->next = NULL; } Status ListInsert( LinkList &L, int i, ElemType e ) {//将取值为e的元素插入带头结点的单链表中第i个位置之前 LNode *p; LNode *s; int j = 0; p = L ; while( p && j < i - 1 ) { p = p ->next ; j++; } if ( j > i - 1 ) return ERROR; //i值不合法 s = ( LinkList ) malloc ( sizeof( LNode ) ); s ->data = e; s ->next = p ->next ; p ->next = s; cout << "成功插入元素"<< e <<endl; return OK; } void OutPutList( LinkList L ) {//输出链表 LNode *p; p = L ->next ; while( p ) { cout << p ->data << " "; p = p ->next ; } } void ListInverse( LinkList &L ) { LNode *p,*q; p =L ->next ; L ->next = NULL; while( p ) { q = p ->next ; p ->next = L ->next ; L ->next = p; p = q; } } int main() { LinkList head; InitList( head ); ElemType elem = '0'; cout <<"请输入5个字符"<<endl; for( int j = 1; j <=5; j++) { cin >> elem; ListInsert( head, j ,elem ); } cout <<"反转前"<<endl; OutPutList( head ); cout <<endl; ListInverse( head ); cout << "反转后"<<endl; OutPutList( head ); system("pause"); return 0; } VS2008下编译通过