#include<stdio.h>
#include<stdlib.h>
typedef struct TreeNode
{
int key;
struct TreeNode* next;
}Node,*ptrNode;
//逆序打印链表
void ReversePrint(ptrNode phead)
{
if(phead==NULL)
return;
if(phead->next!=NULL)
{
ReversePrint(phead->next);
}
printf("%d ",phead->key);
}
//改变链表指针方向,反向指向,时间复杂度为O(n)
ptrNode ChangePtr(ptrNode phead)
{
if(phead==NULL)
return NULL;
ptrNode ptmp,pnext;
ptmp=NULL;
pnext=phead->next;
while(phead!=NULL)
{
phead->next=ptmp;
ptmp=phead;
phead=pnext;
if(pnext!=NULL)
pnext=pnext->next;
else
break;
}
return ptmp;
}
void main()
{
int i;
ptrNode ptmp,phead,ptr,ptrNew;
phead=(ptrNode)malloc(sizeof(Node));
phead->key=0;
ptr=phead;
for(i=0;i<10;i++)
{
ptmp=(ptrNode)malloc(sizeof(Node));
ptmp->key=i+1;
ptmp->next=NULL;
ptr->next=ptmp;
ptr=ptr->next;
}
ReversePrint(phead);
ptrNew=ChangePtr(phead);
printf("\n");
ReversePrint(ptrNew);
printf("\n");
}
链表问题,逆序打印链表,改变链表指向方向
最新推荐文章于 2024-01-27 23:22:01 发布
本文介绍了一种使用递归方法实现链表逆序打印的方法,并提供了一个通过改变链表节点指针方向来实现链表反转的算法。这两种方法都是链表操作中的常见需求,递归方法简洁而直观,改变指针方向的方法则适用于需要真正反转链表的实际场景。
摘要由CSDN通过智能技术生成