单链表反转,单链表创建,单链表尾部插入,单链表打印
2016-08-06 16:35
351 查看
其实,给我感觉,单链表的反转跟链表头部是同一个原理!
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int num;
struct Node *next;
}List;
int display_list(List *list);
List *create_list();
List insert_list_tail(List *head, int i);
int reverse_single_linked_list(List *list);
int main()
{
int i;
List *head = create_list();
for(i=1; i<6; i++)
insert_list_tail(head, i);
display_list(head);
reverse_single_linked_list(head);
display_list(head);
free(head);
return 0;
}
int display_list(List *list)
{
List *p = list;
if(NULL == p->next){
printf("The list is empty!\n");
return -1;
}
while(NULL != p->next){
printf("%d->", p->next->num);
p = p->next;
}
printf("\n");
return 0;
}
List *create_list()
{
List *list = NULL;
list = malloc(sizeof(List));
if(NULL == list){
printf("malloc memory failed!\n");
exit(-1);
}
// initialize head node
list->num = '\0';
list->next = NULL;
return list;
}
List insert_list_tail(List *head, int i)
{
List *new_node = NULL;
List *p = head;
new_node = malloc(sizeof(List));
if(NULL == new_node){
printf("malloc memory failed!\n");
exit(-1);
}
// 1.initialize new node
new_node->num = i;
new_node->next = NULL;
// 2.put the new node noto list tail
while(NULL != p->next){
p = p->next;
}
p->next = new_node;
}
int reverse_single_linked_list(List *list)
{
if(NULL == list->next || NULL == list->next->next){
printf("Empty list or Only one node!\n");
return -1;
}
List *temp_list = list->next;
List *cur = NULL;
list->next = NULL;
while(NULL != temp_list->next){
cur = temp_list;
temp_list = temp_list->next;
cur->next = list->next;
list->next = cur;
}
// The tail node of temp list
temp_list->next = list->next;
list->next = temp_list;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int num;
struct Node *next;
}List;
int display_list(List *list);
List *create_list();
List insert_list_tail(List *head, int i);
int reverse_single_linked_list(List *list);
int main()
{
int i;
List *head = create_list();
for(i=1; i<6; i++)
insert_list_tail(head, i);
display_list(head);
reverse_single_linked_list(head);
display_list(head);
free(head);
return 0;
}
int display_list(List *list)
{
List *p = list;
if(NULL == p->next){
printf("The list is empty!\n");
return -1;
}
while(NULL != p->next){
printf("%d->", p->next->num);
p = p->next;
}
printf("\n");
return 0;
}
List *create_list()
{
List *list = NULL;
list = malloc(sizeof(List));
if(NULL == list){
printf("malloc memory failed!\n");
exit(-1);
}
// initialize head node
list->num = '\0';
list->next = NULL;
return list;
}
List insert_list_tail(List *head, int i)
{
List *new_node = NULL;
List *p = head;
new_node = malloc(sizeof(List));
if(NULL == new_node){
printf("malloc memory failed!\n");
exit(-1);
}
// 1.initialize new node
new_node->num = i;
new_node->next = NULL;
// 2.put the new node noto list tail
while(NULL != p->next){
p = p->next;
}
p->next = new_node;
}
int reverse_single_linked_list(List *list)
{
if(NULL == list->next || NULL == list->next->next){
printf("Empty list or Only one node!\n");
return -1;
}
List *temp_list = list->next;
List *cur = NULL;
list->next = NULL;
while(NULL != temp_list->next){
cur = temp_list;
temp_list = temp_list->next;
cur->next = list->next;
list->next = cur;
}
// The tail node of temp list
temp_list->next = list->next;
list->next = temp_list;
return 0;
}
相关文章推荐
- 单链表中头结点的有无. 并讨论下有无头结点在单链表的创建,打印,插入,逆置,删除中的区别.
- 单链表的创建,删除,插入,翻转,打印--数组存入单链表,单链表翻转
- C语言各种链表操作(创建、打印、删除、插入、反转)
- 单链表创建插入删除打印反转
- 算法研究之——链表的一些操作(创建、打印,在头部、中间、尾部插入节点)
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- 数据结构-链表创建,删除,插入,反转,连接
- 单链表的创建、测长、打印、插入和删除
- [数据结构]链表创建、打印、反转
- 单链表的创建(头插尾插),表长,输出,插入,删除,查找,逆置,分解长两个链表(奇数偶数链表),查找倒数第k个元素,产出相同元素
- 链表操作--创建--删除--插入--打印
- C-链表的一些基本操作【创建-删除-打印-插入】
- 单链表-创建、插入、删除、查找、反转等操作
- 单循环链表-创建、插入、删除、反转等操作
- list 链表的 创建、输出(打印)、删除、插入 2011.07.26
- 【程序员面试宝典】数据结构基础一单链表:创建|求长|插入|删除|排序|打印|逆置
- 链表的创建 打印 反转
- C/C++ 创建单链表,取链表长度,打印链表
- 单链表详解(创建,插入,删除,打印)
- 链表,创建,删除,插入,反转,排序