单向链表翻转

简介:

好久没写C代码了,看到微博上有人出了这个题。手痒写一下。指针这个东西,用得好妙笔生花,用得不好就会各种踩坑。

至于链表,主要是要考虑好它的结构。可以画图来帮助思考。然后就是注意一些变量的变化。

01 #include <string>
02 #include <cstring>
03 #include <iostream>
04 #include <cstdio>
05 using namespace std;
06 #define LL long long
07  
08 struct node{
09        int x;
10        node *next;
11 };
12 //输出
13 int printlist(node *ps){
14     while(ps!=NULL){
15        printf("%d %d %d\n",ps,ps->x,ps->next);
16        ps=ps->next;
17     }
18     return 0;
19 }
20 //翻转
21 node *overturn(node *start){
22          //开始反转
23     node *ps=start;
24     node *tmp=NULL;
25     node *last=NULL;
26     while(ps!=NULL){
27         //保存原链表中,这个节点指向的下一个节点。
28         tmp=ps->next;
29         //将当前节点指向上一个节点
30         ps->next=last;
31         last=ps;       
32         ps=tmp;
33     }
34     start=last;
35     return start;
36 }
37   
38 node *init(){
39     node *start=NULL;
40     node *last=NULL;
41     node *ps=start;
42     int x,num;
43     scanf("%d",&num);
44     for(int i=0;i<num;i++){
45         scanf("%d",&x);
46         node *ps=new node;
47                 
48         //链表赋值
49         ps->x=x;
50         ps->next=NULL;
51  
52         //让上一个指针向它
53         if(last==NULL){   
54             start=ps;
55         }else{
56             last->next=ps;
57         }
58         last=ps;
59     }
60     return start;
61 }
62  
63 int deletelist(node *ps){
64     node *tmp;
65     while(ps!=NULL){
66        tmp=ps;
67        ps=ps->next;
68        delete tmp;
69     }
70 }
71  
72 int main(void)
73 {
74     //数据输入
75     node * start=init();
76     //输出链
77     printlist(start);
78     //分割线
79     printf("\n");
80     //翻转
81     start= overturn(start);
82     //输出链
83     printlist(start);
84     //回收内存
85     deletelist(start);
86     start=NULL;
87     return 0;
88 }

 

转载请注明:旅途@KryptosX » 单向链表翻转

目录
相关文章
|
1月前
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
6月前
|
存储 算法 C语言
【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)
一、链表的概念 二、特点 三、链表的分类 四、单向链表的结构体 命名规范: 二级指针 ❗️注意事项 五、函数实现 1.单链表的打印
【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)
|
7月前
|
Java
面试题-手写一个单向链表
面试题-手写一个单向链表
36 0
|
2月前
|
存储
数据结构 模拟实现LinkedList单向不循环链表
数据结构 模拟实现LinkedList单向不循环链表
33 0
|
2月前
|
存储 Python
如何在Python中实现单向链表和双向链表?
如何在Python中实现单向链表和双向链表?
|
3月前
|
缓存 算法 Java
6.单向链表正确实现方式
6.单向链表正确实现方式
41 1
|
3月前
|
存储 程序员 C语言
链表篇---单向链表的C语言实现
链表篇---单向链表的C语言实现
|
3月前
|
存储 缓存 算法
Algorithms_基础数据结构(02)_线性表之链表_单向链表
Algorithms_基础数据结构(02)_线性表之链表_单向链表
38 0
|
4月前
|
存储 C语言
链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)
在上一篇文章中,我们探索了顺序表这一基础的数据结构,它提供了一种有序存储数据的方法,使得数据的访 问和操作变得更加高效。想要进一步了解,大家可以移步于上一篇文章:探索顺序表:数据结构中的秩序之美 今天,我们将进一步深入,探讨另一个重要的数据结构——链表 链表和顺序表一样,都属于线性表,也用于存储数据,但其内部结构和操作方式有着明显的不同。通过C语言的具体实现,我们将会更加直观地理解它
109 1
链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)
|
4月前
|
存储
队列的学习(一)用数组和链表实现单向队列
队列的学习(一)用数组和链表实现单向队列 队列(Queue)是一种先进先出的数据结构,类似于现实生活中排队的场景。它有两个基本操作:入队(enqueue)和出队(dequeue)。在本文中,我们将介绍如何使用数组和链表来实现单向队列。