您的位置:首页 > 其它

反转链表

2016-04-11 15:18 274 查看
1、将原链表逆序后输出。

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表