鏈表問題,逆序打印鏈表,改變鏈表指向方向



#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");
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章