逆置单链表(递归法)
函数接口定义:
LinkList reverse(LinkList L);
裁判测试程序样例:
#include<iostream> using namespace std; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; void CreateList(LinkList &L, int n) { LinkList p, r; int length; L = new LNode; cin >> L->data; L->next = NULL; r = L; length = 1; while (length<n) { p = new LNode; cin >> p->data; p->next = NULL; r->next = p; r = p; length++; } } void print(LinkList L) { LinkList p; int flag=1; p = L; while (p) { if(flag) cout << p->data; else cout << " "<< p->data; flag=0; p = p->next; } } LinkList reverse(LinkList L); int main() { LinkList L; ElemType e; int length; cin >> length; CreateList(L, length); L=reverse(L); print(L); return 0; } /* 请在这里填写答案 */
输入样例:
第一行输入一个数n,第二行输入n个数。
12
19 14 23 1 68 20 84 27 55 11 10 79
输出样例:
输出逆置后单链表结点值。
79 10 11 55 27 84 20 68 1 23 14 19
题解:
LinkList reverse(LinkList L) {
if (L==NULL || L->next==NULL)
return L;
LinkList sum = reverse(L->next);
L->next->next=L;
L->next=NULL;
return sum;
}