用c++实现单链表的逆序输出。
题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出
方法一:采用首先将头节点指向空,让其变为尾节点,然后利用中间节点 p、q 将其后的节点一个接一个改为指向前面的节点
#includeusing namespace std; struct List { int num; List *next; }; List *createList(int n) //创建含有n个节点的单链表 { List *head, *p, *q; q=head = NULL; //初始化表头和中间指针 int i; for (i = n; i > 0; --i) { p = new List; //申请空间,创建第一个节点 cin >> p->num; //往节点中存入数据信息 if (head == NULL) { head = p; } else { q->next = p; } q = p; } q->next = NULL; return head; } List *ReverseList(List *head) //逆置单链表 { List *p, *r; //定义两个中间节点,用于顺移逆置链表节点 if (head->next == NULL) return head; p = head; //获取头节点地址 r = p->next; //获取链表第二个节点地址 p->next = NULL; //头节点变为尾节点,原链表表头指向空 while (r) { p = r; r = r->next; p ->next = head; //使第二个节点指向原先的头节点 head = p; //使第二个节点变为头节点,用于循环逆置 } return head; } void print(List *head) //输出逆置后的单链表 { List *p; p = head; while (p) { cout< num; p = p->next; cout << " "; } cout << endl; } int _tmain(int argc, _TCHAR* argv[]) { List *p, *q; cout << "请输入单链表的节点个数:"; int n; cin >> n; cout << endl; cout << "创建一个节点为" << n << "的单链表" << endl; p = createList(n); cout << endl; cout << "这步为程序逆置单链表" << endl; q = ReverseList(p); cout << endl; cout << "打印逆置后的单链表" << endl; print(q); cout << endl; return 0; }