用递归和非递归的方法 逆置单链表

来源:互联网 发布:数据结构算法题不会做 编辑:程序博客网 时间:2024/04/30 07:24
#include <iostream>using namespace std;struct Node{int data;Node* next;}*head;// 非递归写法Node* InverseLinkedList(Node* head){if(head == NULL)return NULL;Node* newHead = NULL;while(head != NULL){Node* nextNode = head->next;head->next = newHead;newHead = head;head = nextNode;}return newHead;}// 递归写法Node* InverseLinkedListRecur(Node* head){if(head == NULL)return NULL;if(head->next == NULL)return head;Node* newHead = InverseLinkedListRecur(head->next);Node *tmp = newHead;while(tmp->next != NULL){tmp = tmp->next;}tmp->next = head;head->next = NULL;return newHead;}int main(){// 构建链表 9->8->7->6->5->4->3->2->1->0->NULLfor(int i = 0; i < 10; i++){Node* node = new Node();node->data = i;node->next = head;head = node;}head = InverseLinkedList(head);Node *tmp = head;while(head != NULL){cout << head->data << " ";head = head->next;}cout << endl;head = InverseLinkedListRecur(tmp);tmp = head;while(head != NULL){cout << head->data << " ";head = head->next;}cout << endl;while(tmp != NULL){Node* next = tmp->next;delete tmp;tmp = next;}}

原创粉丝点击