递归实现单链表的尾插法

发布于:2024-10-08 ⋅ 阅读:(112) ⋅ 点赞:(0)
// 尾插法单链表递归.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表示结束!!!!


网站公告

今日签到

点亮在社区的每一天
去签到