单向链表的反转最简单方法
2011-06-19 15:43
260 查看
给出一个单向链表的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
例如: 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
相关文章推荐
- 单向链表的反转最简单方法
- 单向链表的反转最简单方法
- 反转单向链表的几种方法
- 一种简单的单链表逆序、反转的方法
- 递归方法反转单向链表(C/C++)
- 用C++类实现单向链表的增删查和反转操作方法
- [Java]单向链表 ,循环链表的简单使用方法
- 单向链表的反转
- leetCode 92.Reverse Linked List II (反转链表II) 解题思路和方法
- 单向链表的反转
- 【简单算法】23.反转链表
- 单向链表反转
- [算法]反转单向链表和双向链表
- 《算法之美》の链表问题の单向链表的反转
- 单链表反转(三种方法总结)
- 单向链表反转
- 在单向链表中拆除某个节点的方法
- OJ--单向链表反转
- 单向链表反转
- 单向链表的插入、查找和遍历方法 (c)