单向链表逆序输出与单向链表反转(递归)

68 阅读1分钟
//节点
typedef struct LinkNode {
	struct LinkNode* next;
	int data;
}node;
//创建节点
node* create_node(int data) {
	node* link = (node*)malloc(sizeof(*link));

	if (link == NULL) {
		std::cout << "error\n";
		return NULL;
	}
	link->data = data;
	link->next = NULL;
}
//尾插
node* list_node() {
	node* head = create_node(0);
	node* p = head;
	for (int i = 1; i < 10; i++) {
		while (p->next != NULL) {
			p = p->next;
		}
		node* new_node = create_node(i);
		p->next = new_node;
		p = p->next;
	}
	return head;
}
//打印
void print_link(node* head) {
	node* p = head;
	while (p) {
		std::cout << p->data << " ";
		p = p->next;
	}
	std::cout << "\n";
}
//链表反转
node* reverse(node* head) {
	if (!head->next) {
		return head;
	}
	node* ret = reverse(head->next);
	head->next->next = head;
	head->next = nullptr;
	return ret;
}
//链表逆序输出
void print_reverse(node* head) {
	if (!head) {
		return;
	}
	print_reverse(head->next);
	std::cout << head->data;
}
int main() {
	node* list = list_node();
	std::cout << "befor link_list :";
	print_link(list);
	/*
	std::cout << "after link_list :";
	print_reverse(list);*/
	std::cout << "after reverse link_list :";
        
	node* L = reverse(list);
	print_link(L);
	return 0;
}