给出一个头结点让单链表逆序
发布日期:2021-05-07 04:39:38 浏览次数:24 分类:精选文章

本文共 1164 字,大约阅读时间需要 3 分钟。

1.思路:

思路:(如上图)                                                                                                                                      

1.首先把链表分成两部分:头结点Head和头节点下一个结点Current作为一组A,剩下的作为另一组B。把Current指向NULL,断开链表。

2.把B组的结点1,2,3........,依次插入到Head和Current之间。

3.最后把Head指回最后插入的结点就完成了。

思路实现函数:

Node* fun(Node* Head){	Node *Pn;	Node *Pre;	Node *Current = Head->next;	Pn = Current->next;	Current->next=NULL;	while(Pn!=NULL)	{		Pre=Pn->next;		Pn->next=Current;		Current=Pn;		Pn=Pre;	}	Head->next=Current;	return Head;}

测试代码:

#include 
typedef struct A{ int a; struct A *next;}Node;Node* fun(Node* Head){ Node *Pn; Node *Pre; Node *Current = Head->next; Pn = Current->next; Current->next=NULL; while(Pn!=NULL) { Pre=Pn->next; Pn->next=Current; Current=Pn; Pn=Pre; } Head->next=Current; return Head;}int main(){ /*构造链表,int a分别为0,1,2,3,4*/ Node arr[5]; Node head; Node *Head; Node *pn; Head = &head; pn = Head; int i; for(i=0;i<5;i++) arr[i].a=i; Head->next=&arr[0]; for(i=0;i<4;i++) { arr[i].next=&arr[i+1]; } arr[4].next=NULL; pn=Head->next; /*打印原链表*/ while(pn!=NULL) { printf("%d,",pn->a); pn=pn->next; } printf("\n"); /*-----------------------逆序后--------------------------------*/ Head = fun(Head); pn=Head->next; while(pn!=NULL) { printf("%d,",pn->a); pn=pn->next; } return 0;}

上一篇:C++STL之vector容器
下一篇:C++static类成员,static类成员函数

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月07日 21时46分14秒