反转链表
2016-04-11 15:18
274 查看
1、将原链表逆序后输出。
输出结果显示:
2、设有一个不带表头结点的单链表,表头指针为head。试设计一个算法,通过遍历一趟链表,将链表中所有结点的链接方向逆转。
#include <iostream> using namespace std; typedef struct NODE { int data; NODE *next; }Node; //链表的创建 Node *create(Node a[],int n) { Node *head = &a[0]; for(int i = 0;i < n-1;i++) { a[i].next = &a[i+1]; } a[n-1].next = NULL; return head; } //链表的输出 void output(Node *head) { Node *p = head; while(p!=NULL) { cout<<p->data<<"\t"; p = p->next; } } //反转链表 Node *ReverseLink(Node *head) { if(head==NULL||head->next==NULL) { return head; } Node *p1 = head; Node *p2 = p1->next; Node *p3 = p2->next; p1->next = NULL; while(p3!=NULL) { p2->next = p1; p1 = p2; p2 = p3; p3 = p3->next; } p2->next = p1; head = p2; return head; } int main() { Node a[7] = {{11},{32},{45},{78},{73},{95},{50}};//注意{} Node *head = create(a,7); output(head); cout<<endl; head = ReverseLink(head); output(head); cout<<endl; system("pause"); return 0; }
输出结果显示:
typedef struct LinkNode { int data; struct LinkNode *next; }LinkNode; LinkNode *InvertNode(LinkNode *head) { LinkNode *mid,*last; mid = NULL; while(head!=NULL) { last = mid; mid = head; head = head->next; mid->next = last; } return mid; }
2、设有一个不带表头结点的单链表,表头指针为head。试设计一个算法,通过遍历一趟链表,将链表中所有结点的链接方向逆转。
typedef int Elemtype; typedef struct node { Elemtype data; struct node *link; } Node,*LinkList; void Reverse(LinkList& head) { if(head==NULL) return; //空表无需逆转 Node *p = head->link,*pre = NULL; while(p != NULL) { head->link = pre; //逆转head指针 pre = head; head = p; p = p->link; //指针前移 } head->link = pre; }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)
- C语言实现输出链表中倒数第k个节点
- C++语言实现线性表之链表实例
- STL list链表的用法详细解析