单向链表翻转

简介:

好久没写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 » 单向链表翻转

目录
相关文章
|
3月前
|
Python
【Leetcode刷题Python】25.K 个一组翻转链表
解决LeetCode "K 个一组翻转链表" 问题的三种方法:使用栈、尾插法和虚拟节点顺序法,并提供了每种方法的Python实现代码。
32 0
|
1月前
|
存储
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(一)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
|
1月前
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
21 0
|
1月前
|
存储 缓存
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(二)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
|
3月前
|
存储 JavaScript 前端开发
JavaScript实现单向链表
JavaScript实现单向链表
22 0
|
5月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
5月前
|
算法 C语言
数据结构——单向链表(C语言版)
数据结构——单向链表(C语言版)
47 2
|
5月前
|
算法 Java C语言
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
35 1
|
6月前
|
算法
25. K 个一组翻转链表
25. K 个一组翻转链表
59 9