数据结构——算法之(023)( 单链表就地逆置,头插法)
2014-06-04 15:38
295 查看
【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】
题目:
单向链表的就地逆置
题目分析:
一、方法很多,这里使用头插法
(1)顺序遍历链表,并把每个节点从新插入在头结点后面
(2)其实就是简单的头插法建立链表的过程
算法实现:
题目:
单向链表的就地逆置
题目分析:
一、方法很多,这里使用头插法
(1)顺序遍历链表,并把每个节点从新插入在头结点后面
(2)其实就是简单的头插法建立链表的过程
算法实现:
#include <stdio.h> #include <stdlib.h> typedef struct _list_node { int key; struct _list_node *next; }list_node; void *list_insert(list_node *head, int key) { list_node *p = head; while(p->next != NULL) p = p->next; list_node *node = calloc(1, sizeof(list_node)); node->key = key; node->next = NULL; p->next = node; } void list_display(list_node *head) { list_node *p = head->next; printf("list:"); while(p != NULL) { printf(" %d", p->key); p = p->next; } printf("\n"); } /* ** 头插法 */ list_node *list_reverse(list_node *head) { list_node *p = head->next; list_node *q = NULL; head->next = NULL; while(p != NULL) { q = p->next; /*保存下一个节点*/ p->next = head->next; /*把节点插入到头结点后面*/ head->next = p; /*头结点一直指向最新插入的节点*/ p = q; /*调整指针,指向下一个节点*/ } } int main(int argc, char *argv[]) { list_node *head = calloc(1, sizeof(list_node)); head->key = 0; head->next = NULL; list_insert(head, 1); list_insert(head, 2); list_insert(head, 3); list_insert(head, 4); list_insert(head, 5); list_display(head); list_reverse(head); list_display(head); return 0; }
相关文章推荐
- 【学习点滴-数据结构-单链表】单链表的就地逆置
- 试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法
- 【数据结构与算法】链表逆置
- 对带头结点的单链表实现就地逆置的算法分析
- php学习第一章:PHP基础语法(三)数据结构与算法:2、单向链表
- 数据结构与算法-双链表(初级)
- 实战数据结构(8)_单链表的就地逆置
- 数据结构实验之链表三:链表的逆置
- 【数据结构与算法基础】单链表及其应用基数排序 / Singly Linked List and radix sort
- .net 数据结构与算法基础:泛型链表使用
- 数据结构与算法——链表
- 单链表就地逆置的高效算法
- 数据结构之链表合并算法
- 数据结构与算法之链表(三)单链表反转
- 数据结构之单链表取第i个元素的算法
- 数据结构与算法:链表(源码)!
- 转:C#数据结构和算法学习系列十三----链表
- 数据结构知识整理-链表的建立 逆置
- 数据结构之链表合并算法
- 数据结构与算法 2、单向/双向链表