您的位置:首页 > 其它

如何实现单向链表的逆置

2015-08-10 17:03 351 查看

如何实现单向链表的逆序呢?

开发环境:VS2013

#include <stdio.h>

#include <stdlib.h>

struct list

{

int data;

struct list *next;

};
struct list *create_list()//建立一个节点

{

//struct list *p = malloc(sizeof(struct list));

//p->data = 0;

//p->next = NULL;

//return p;

return (struct list *)calloc(sizeof(struct list), 1);

}

void traverse(struct list *ls)//循环遍历链表

{

struct list *p = ls;

while (p)

{

printf("%d\n", p->data);

p = p->next;

}

}

void reverse(struct list *ls)

{

if (ls->next == NULL)

return;

if (ls->next->next == NULL)

return;

struct list *p1 = ls;

struct list *p2 = ls->next;

struct list *p3 = NULL;

struct list *last = ls->next;

while (p2)

{

p3 = p2->next;

p2->next = p1;

p1 = p2;

p2 = p3;

}

last->next = NULL;

ls->next = p1;

}

int main(void)

{

struct list *first = create_list();//创建了一个首节点

int i;

for (i = 0; i < 10; i++)

{

insert_list(first, 0, i);

}

traverse(first);

reverse(first);

traverse(first);

free(first);

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: