// 尾插法单链表递归.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#define endtag -1
typedef struct node {
int data;
struct node* link;
}Linknode,*linklist;
void createrear(linklist& last, int end)
{
int val;
cin >> val;
if (val == endtag)
{
last = NULL;//链表收尾停止创建
}
else
{
last = new Linknode;//创建新节点
last->data = val;
createrear(last->link,end);//递归创建后续链表
}
}
void print(linklist first)
{
if (first == NULL)
return;
cout << first->data << " ";
print(first->link);
}
int main()
{
linklist l; int end;
l = new Linknode;
linklist rear = l;//尾指针,初始化指向头结点
cin >> end;//输入约定的结束标志
createrear(rear->link,end);
std::cout << "Hello World!\n";
print(l->link);
}
last = new Linknode;//创建新节点
last->data = val;
createrear(last->link,end);//递归创建后续链表
last->link是下一个节点的地址
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
下面做了一点简单的改动
// 尾插法单链表递归.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#define endtag -1
typedef struct node {
int data;
struct node* link;
}Linknode,*linklist;
void createrear(linklist& last)
{
int val;
cin >> val;
if (val == endtag)
{
last = NULL;//链表收尾停止创建
}
else
{
last = new Linknode;//创建新节点
last->data = val;
createrear(last->link);//递归创建后续链表
}
}
void print(linklist first)
{
if (first == NULL)
return;
cout << first->data << " ";
print(first->link);
}
int main()
{
linklist l; int end;
l = new Linknode;
linklist rear = l;//尾指针,初始化指向头结点
// cin >> end;//输入约定的结束标志
createrear(rear->link);
std::cout << "Hello World!\n";
print(l->link);
}
-1表示结束!!!!