数据结构学习笔记1-链表反转(递归与非递归)
2015-08-04 11:34
531 查看
最近在学习数据结构,做下笔记:
思路很多,如下:
源代码来源于
链表反转-数据结构
参考博文:
看图理解单链表的反转
单链表反转/逆序的两种方法
思路很多,如下:
不使用递归:
//============================================================================ // Name : 链表反转.cpp // Author : Gaotong // Version : // Copyright : www.acmerblog.com // Description : Hello World in C++, Ansi-style //============================================================================ #include<stdio.h> #include<stdlib.h> /* 链表节点 */ struct node { int data; struct node* next; }; /* 反转单链表. 分别用3个指针,指向前一个,当前,下一个 */ static void reverse(struct node** head_ref) { struct node* prev = NULL; struct node* current = *head_ref; struct node* next; while (current != NULL) { next = current->next; current->next = prev; prev = current; current = next; } *head_ref = prev; } /* 添加数据。 头部插入 */ void push(struct node** head_ref, int new_data) { struct node* new_node = (struct node*) malloc(sizeof(struct node)); new_node->data = new_data; new_node->next = (*head_ref); (*head_ref) = new_node; } /* 打印链表 */ void printList(struct node *head) { struct node *temp = head; while(temp != NULL) { printf("%d ", temp->data); temp = temp->next; } } int main() { struct node* head = NULL; push(&head, 20); push(&head, 4); push(&head, 15); push(&head, 85); push(&head, 60); push(&head, 100); printList(head); reverse(&head); printf("\n Reversed Linked list \n"); printList(head); }
使用递归:
/* 使用递归的方法 */ static struct node * reverseRecall(struct node* head){ //最后一个节点会返回 作为头部 if(NULL == head || head->next == NULL) return head; //head->next 表示剩下的部分 struct node * newHead = reverseRecall(head->next); head->next->next = head; //颠倒指针 head->next = NULL;//原来的头节点 next 应该为空 return newHead; }
源代码来源于
链表反转-数据结构
参考博文:
看图理解单链表的反转
单链表反转/逆序的两种方法
相关文章推荐
- 读书笔记:数据结构与算法分析(java语言描述)——引论
- 数据结构03_栈、队列和数组
- 位图数据结构的实现与应用
- 数据结构 树状数组
- hdu 3791 二叉搜索树(数据结构)
- <C/C++数据结构>常见的树结构
- 数据结构 树
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- HDU 4008 Parent and son (数据结构)
- 数据结构与算法1
- UVA - 12532 Interval Product
- 数据结构之链表、栈和队列 java代码实现
- 数据结构之链表、栈和队列 java代码实现
- 从头开始学习算法和数据结构
- 数据结构:散列
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 数据结构——二叉树的遍历
- 树-堆结构练习——合并果子之哈夫曼树
- 数据结构与算法分析 java语言描述 课后题1.6