单向链表的反转最简单方法

给出一个单向链表的header,要求经过处理变成反向,即原链表尾变为链表头,原链表头变成链表尾。

例如:           10->20->30->NULL  

处理后变为:   30->20->10->NULL

 

我想,下面这应该是时间和空间方面都最简单的方法。

struct list{
 int value;
 struct list* next;
};

static int reverse(struct list **pl)
{
 struct list* header,*tmp;

 if(*pl==NULL) return 0;

 header = NULL;
 //add node to header and point to next node.
 while(*pl!=NULL) {tmp=*pl; *pl=(*pl)->next; tmp->next=header; header=tmp;}

 *pl = header;
 return 1;
}

 

测试:

static void print_list(struct list *pl)
{
 struct list *header = pl;
 printf("list:");
 while(header!=NULL){
  printf(" %d",header->value);
  header = header->next;
 }
 printf("/n");
}

int _tmain(int argc, _TCHAR* argv[])
{
#define NUMBER  9
 int i = 0;
 int score[NUMBER] = {10,20,30,40,50,60,70,80,90};
 struct list *header,*cur,*tmp;
 
 header = cur = NULL;
 //create list.
 while(i < NUMBER) {
  tmp = (struct list *)malloc(sizeof(struct list));
  tmp->value = score[i];
  tmp->next = NULL;
  if(i==0)
   header = cur = tmp;
  else{
   cur->next = tmp;
   cur = cur->next;
  }
  i++;
 }
 print_list(header);

 reverse(&header);
 print_list(header);

 reverse(&header);
 print_list(header);

 printf("hello,world!/n");
 getch();
 return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值