逆转链表
来源:互联网 发布:数据库管理系统的是 编辑:程序博客网 时间:2024/06/05 15:44
利用三个节点:
第一个节点用于返回,也就是新的链表头节点;
第二个节点是当前节点,第三个节点是当前节点的next节点
code如下
/* * Copyright (c) 2011 alexingcool. All Rights Reserved. */ #include <iostream>using namespace std;int array[] = {5, 7, 6, 9, 11, 10, 8};const int size = sizeof array / sizeof *array;struct Node{Node(int i = 0, Node *n = NULL) : item(i), next(n) {}int item;Node *next;};Node* construct(int (&array)[size]){Node dummy;Node *head = &dummy;for(int i = 0; i < size; i++) {Node *temp = new Node(array[i]);head->next = temp;head = temp;}return dummy.next;}Node* reverse(Node *head){if(head == NULL) {cout << "link is null" << endl;return NULL;}Node *newHead = NULL, *pHeadNext = head;while(pHeadNext) {head = pHeadNext;pHeadNext = pHeadNext->next;head->next = newHead;newHead = head;}return newHead;}void reverse2(Node *root, Node* &head, Node* &tempHead){if (root == NULL)return;reverse2(root->next, head, tempHead);if (head == NULL){head = root;tempHead = head;}else{tempHead->next = root;tempHead = root;tempHead->next = NULL;}}void print(Node *head){while(head) {cout << head->item << " ";head = head->next;}}void main(){Node *head = construct(array);cout << "source link: ";print(head);cout << endl;Node *newHead2 = NULL;Node *tempHead = NULL;reverse2(head, newHead2, tempHead);print(newHead2);cout << endl;}
逆转链表最优雅的循环解法:
Node* reverse(Node *head){if(head == NULL) {cout << "link is null" << endl;return NULL;}Node *previous = NULL, *pHead = head;while(pHead) {Node *temp = pHead->next;pHead->next = previous;previous = pHead;pHead = temp;}return previous;}
优雅的递归算法:
Node* reverseLink(Node *link){if (link->next == NULL) {return link;}Node *node = reverseLink(link->next);Node *ptr = link->next;link->next = link->next->next;ptr->next = link;return node;}
Node* reverseLink(Node *head){if (head == NULL || head->next == NULL)return head;Node *node = reverseLink(head->next);head->next->next = head;head->next = NULL;return node;}
- 逆转链表
- 单向链表逆转
- 链表的逆转
- 逆转单向链表
- 关于逆转链表
- 实现链表逆转
- 线性链表逆转
- 逆转链表
- 链表就地逆转
- 链表逆转
- K链表逆转
- 链表的逆转
- 单向链表逆转
- [链表]逆转链表
- 单向链表逆转
- 链表逆转
- 链表逆转
- java逆转链表
- GDB调试程序
- OGRE 纹理单元
- Sql server数据库中给虚拟表添加序号列(转)
- Notification和NotificationManager的基本使用方法
- JavaScript浮点数问题[转]
- 逆转链表
- 就地逆转输出链表
- 缺陷跟踪系统简介
- JBOSS最大连接数配置和jvm内存配置
- java 发送email
- MS SQL SERVER 2005 MDF文件单独附加
- java email smtp
- Linux/Unix基础
- vi编辑器入门