数据结构学习笔记1-链表反转(递归与非递归)
来源:互联网 发布:淘宝买家数据购买 编辑:程序博客网 时间:2024/06/16 21:56
最近在学习数据结构,做下笔记:
思路很多,如下:
不使用递归:
//============================================================================// 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;}
源代码来源于
链表反转-数据结构
参考博文:
看图理解单链表的反转
单链表反转/逆序的两种方法
0 0
- 数据结构学习笔记1-链表反转(递归与非递归)
- 反转链表(递归与非递归)
- 链表反转--递归与非递归
- 链表反转(递归与非递归实现)
- 链表的建立与反转(递归反转和非递归反转)
- C++递归与非递归实现链表的反转
- 反转链表[递归,非递归]
- 反转链表(非递归)
- 数据结构学习笔记(二)---求阶乘(递归与非递归)
- 数据结构学习笔记(7)---二叉树递归与非递归遍历
- 边看边写(链表反转(递归和非递归))
- 【剑指offer】反转链表(递归+非递归)
- 实现链表的反转(递归方法与非递归方法)
- 链表的建立、输出、非递归反转、递归反转
- 单链表的反转(非递归与递归版本)
- 单链表的反转(递归与非递归方式)
- 反转单链表 递归与非递归
- 单链表反转:递归与非递归实现
- 读书笔记:数据结构与算法分析(java语言描述)——引论
- iOS开发 代码创建UITabBarController
- Android无线连接打印第三方开发的实现
- 产品经理之UI设计——UI/UX设计趋势
- Hadoop之集群设置
- 数据结构学习笔记1-链表反转(递归与非递归)
- String是原始数据类型还是引用数据类型
- jsp页面EL表达式不被解析问题总结
- 剑指offer习题
- C++函数参数的默认值
- 程序员几个重要的网站
- 初学者很实用:数据库连接池之c3p0入门
- 二进制文件切割与合并
- fjut 1107 第八集 你明明自己也生病了,却还是要陪着我(字典树)