注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

c++小知识13——单向链表倒序(转载)  

2011-02-24 15:27:21|  分类: 算法及数据结构 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

又到面试高峰了,给大家转一个单向链表倒序的例子,很有启发。也类似于倒着插入数据,很好玩,不过注意有头无头,这个是有头节点的。

单向链表倒序 收藏
#include <stdio.h>
#include <stdlib.h>
#define null 0
  typedef   struct   node  
  {int   data;  
    struct   node   *next;  
  }linklist;  
  linklist   *invert(linklist   *head)  
  {linklist   *p,*q,*s;  
  p=head->next;  
  q=head;  
  while(p!=null)  
  {s=q;q=p;p=p->next;q->next=s;  
    if(q==head->next)   q->next=null;  
  }  
  head->next=q;  
  return   head;  
  }

  void main()
  {
     linklist *p,*q,*head;
  int n=0;
  head=(struct   node*)malloc(sizeof(struct   node));
  p=q=(struct   node*)malloc(sizeof(struct   node));
  head->next=p;
  scanf("%d",&p->data);
  while(p->data!=0)
  {
   q->next=p;
   q=p;
   p=(struct   node*)malloc(sizeof(struct   node));
   scanf("%d",&p->data);
  }
  q->next=null;

  p=head->next;
  while(p)
  {
   printf("%d ",p->data);
   p=p->next;
  }
  printf("\n");
  head=invert(head);
  p=head->next;
  while(p)
  {
   printf("%d ",p->data);
   p=p->next;
  }
  printf("\n");
  }

方法二

新建链表

#include <stdio.h>
#include <stdlib.h>
#define null 0
  typedef   struct   node
  {int   data;
    struct   node   *next;
  }linklist;
  linklist   *invert(linklist   *p_old)
  {
   linklist   *p_new,*head,*q;
   p_new=(struct   node*)malloc(sizeof(struct   node));
   head=(struct   node*)malloc(sizeof(struct   node));
   p_new->data=p_old->data;
   p_new->next=null;
   head->next=p_new;
   while(p_old->next->data)
  {
   p_old=p_old->next;
   q=p_new;
   p_new=(struct   node*)malloc(sizeof(struct   node));
   p_new->data=p_old->data;
   p_new->next=q;
   head->next=p_new;
  }

      return head;
  }

  void main()
  {
     linklist *p,*q,*head;
  int n=0;
  head=(struct   node*)malloc(sizeof(struct   node));
  p=q=(struct   node*)malloc(sizeof(struct   node));
  head->next=p;
  scanf("%d",&p->data);
  while(p->data!=0)
  {
   q->next=p;
   q=p;
   p=(struct   node*)malloc(sizeof(struct   node));
   scanf("%d",&p->data);
  }
  q->next=null;

  p=head->next;
  while(p)
  {
   printf("%d ",p->data);
   p=p->next;
  }
  printf("\n");
  head=invert(head);
  p=head->next;
  while(p->next)
  {
   printf("%d ",p->data);
   p=p->next;
  }
  printf("\n");
  }

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tianhuo_soft/archive/2007/06/20/1658733.aspx

  评论这张
 
阅读(1099)| 评论(3)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017