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

news/2024/7/6 0:11:44 标签: header, list, struct, null, 测试, 2010

给出一个单向链表的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;
}


http://blog.csdn.net/knock/archive/2010/11/26/6036703.aspx


http://www.niftyadmin.cn/n/1720000.html

相关文章

Android 本地代码中的LIKELY和UNLIKELY宏

阅读Android Frameworks中的C代码时&#xff0c;经常会碰到在条件判断语句中使用了LIKELY和UNLIKELY这两个宏&#xff0c;找到这两个宏的定义如下&#xff1a; #define LIKELY( exp ) (__builtin_expect( (exp) ! 0, true )) #define UNLIKELY( exp ) (__builtin_…

构造方法(一种特殊的方法)

1、定义 方法名与类名相同。 无返回值&#xff0c;但是不能加void。 package 构造方法; public class Circle extends Shape{private double radius;private double pi3.1415926;public Circle(){}public Circle(double radius){this.radius radius;}public double getRadius(…

PVAuthor开发指南

目 录 1 引言.... 4 2 架构概述.... 4 2.1 PVAuthor架构... 4 2.2 整体顺序图... 5 3 PVAuthor状态机.... 6 4 创建和打开会话.... 6 5 数据源.... 6 5.1 创建和增加数据源... 6 5.2 数据源配置... 7 6 文件格式组成.... 7 6.1 composer选择... 7 6.2 composer配置... 8 6.2.1 …

Windows10 C++(VS2017)调用python(python3.8)-5.PyDict tcy

1.函数&#xff1a;int PyDict_Check(PyObject *p) 判断对象是不是一个字典PyObject* PyDict_New() 创建一Python dict对象void PyDict_Clear(PyObject *p) 清空Python对象数据int PyDict_Contains(PyObject p, PyObject key) 判断字典内是否存在一个键值数据PyObject PyDict_C…

gnome-keyring的烦恼

gnome -keyring的烦恼 GNOME -keyring是用来保存在GNOME 环 境中所使用的各种密码。如果在某程序中需要输入密码&#xff0c;而我们想保存密码的话&#xff0c;如果保存密码的功能由各程序独自提供&#xff0c;那么会出现安全问题或者不可操作&#xff0c;安全 问题是&…

Halcon流程控制语句 第一讲(tcy)

流程控制语句1.选择语句&#xff1a;1.1.if..else语句:if()[elseif()][else]endif1.2.switch…case语句:switch (Index)case 1:*常量表达式break*中断跳出case 2:breakcase 3:breakdefault:breakendswitch2.循环语句&#xff1a;2.1.For循环语句&#xff1a;for i: 0 to NumBal…

2019 Multi-University Training Contest 1 补题

贴一下队友博客链接 https://blog.csdn.net/qq_38515845/article/details/97438369 1001 Blank&#xff08;HDU 6578&#xff09; 题意&#xff1a;用\({0,1,2,3}\)四种数填长为n的空行&#xff0c;有m个形如\([l,r,x]\)的限制表示\([l,r]\)区间要出现x种数。 题解&#xff1a;…

20190729

倒数第3&#xff0c;这是个悲伤的故事............... 可以认为是暴零了。。。。悲伤。。 就是不行&#xff0c;心态也炸&#xff0c;干某个题干了2小时40多分钟&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;然后它WA0 了。。。 第一题一直在想ON的&#xff0…