【C语言】链表逆序
2017-10-28 16:42
281 查看
链表有:有头链表、无头链表
1、有头单链表的创建
有头链表逆序函数
2、无头单链表创建
注:
1.在主函数中创建的是一个自定义类型的指针类型的变量
2.在传参时只要是对链表进行改动的函数,都要传二级指针(上述代码 Node** 类型)
3.显示函数不需要对链表进行更改,所以传一级指针就可以了(上述代码 Node*
类型)
1、有头单链表的创建
#include <stdio.h> #include<stdlib.h> typedef struct Node //结构体 自定义类型 { int data; struct Node*next; }Node; void Init(Node** list) //头节点初始化 { *list = (Node*)malloc(sizeof(Node)); (*list)->next = NULL; } void Pushback(Node**list,int d) //尾插节点 { Node*ret = (*list)->next; Node*newNode = (Node*)malloc(sizeof(Node)); if (newNode) { newNode->data = d; newNode->next = NULL; } if (ret==NULL) { (*list)->next = newNode; return; } while (ret->next) { ret = ret->next; } ret->next = newNode; } void Popback(Node**list) //尾删节点 { Node*temp = NULL; Node*ret = *list; ret = ret->next; if (ret == NULL) return; else { while (ret->next) { temp = ret; ret = ret->next; } free(temp->next); temp->next = NULL; } } void Display(Node *list) //显示函数 { Node*ret = list->next; while (ret) { printf("-->%d ",ret->data); ret = ret->next; } printf("\n"); }
有头链表逆序函数
void Reverse(Node**list) //有头链表逆序 { Node*ret = (*list)->next; (*list)->next = NULL; Node*p = NULL; while (ret) { p = ret->next; ret->next = (*list)->next; (*list)->next = ret; ret = p; } }在主函数中调用
int main() { Node*mylist; Init(&mylist); Pushback(&mylist, 1); Pushback(&mylist, 2); Pushback(&mylist, 3); Pushback(&mylist, 4); Display(mylist); Reverse(&mylist); Display(mylist); system("pause"); return 0; }
2、无头单链表创建
#include <stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node* next; }Node; void Init(Node** list) { *list = NULL; } void PushBack(Node **list,int d) //尾插 { Node*ret = *list; Node*newNode = (Node*)malloc(sizeof(Node)); if (newNode) { newNode->data = d; newNode->next = NULL; } if (ret == NULL) { *list = newNode; } else { while (ret->next) { ret = ret->next; } ret->next = newNode; } } void Popback(Node**list) //尾删 { Node*temp=NULL; Node*ret = *list; if (*list == NULL) return; while (ret->next) { temp = ret; ret = ret->next; } free(temp->next); temp->next = NULL; } void Display(Node* list) //显示函数 { if (list == NULL) return; while (list) { printf("--->%d ", list->data); list = list->next; } printf("--->end"); printf("\n"); }无头单链表逆序函数
void Reverse(Node**list) //无头链表逆序 { Node*ret = *list; Node*p = NULL; Node*q = NULL; while (ret) { p = ret->next; ret->next = NULL; ret->next = q; q = ret; ret = p; } *list = q; }在主函数中调用
int main() { Node* mylist; Init(&mylist); PushBack(&mylist,1); PushBack(&mylist,2); PushBack(&mylist,3); PushBack(&mylist,4); PushBack(&mylist, 5); Display(mylist); Reverse(&mylist); Display(mylist); system("pause"); return 0; }
注:
1.在主函数中创建的是一个自定义类型的指针类型的变量
2.在传参时只要是对链表进行改动的函数,都要传二级指针(上述代码 Node** 类型)
3.显示函数不需要对链表进行更改,所以传一级指针就可以了(上述代码 Node*
类型)
相关文章推荐
- 链表逆序在C语言中的技巧课程
- C语言笔试题(8)——链表逆序
- C语言单链表逆序
- c语言链表逆序的问题
- C语言-----链表的逆序
- C语言实现单链表逆序与逆序输出实例
- C语言 逆序输出单链表(递归)
- C语言实现单链表逆序与逆序输出实例
- 常见C语言面试题之九:链表逆序
- 练练手,练练手——C语言用递归对链表逆序
- C语言 将链表中的元素在同一个链表中逆序输出
- 单向链表之逆序(C语言实现)
- C语言 链表 数据结构实验之链表二:逆序建立链表
- C语言链表操作(新增单向链表的逆序建立)
- C语言 链表尾插入和逆序
- 单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
- C语言 逆序打印链表(递归)
- C语言解字符串逆序和单向链表逆序问题的代码示例
- 链表的创建、测长、排序、插入、逆序的实现(C语言)
- C语言实现链表的创建、增加、删除、查询、逆序、清空等基本操作