Alogorim:链表原地反转Demo

Posted PhiliAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Alogorim:链表原地反转Demo相关的知识,希望对你有一定的参考价值。

  现在就是Qt开发和给师弟师妹讲下数据结构吧,感觉还挺漫长的,上个Qt帖子等我把成品做出来再更。

 1 //Convert_plug.h
 2 
 3 #ifndef CONVERT
 4 #define CONVERT
 5 
 6 #define MAX 81
 7 typedef char NmaeType; 
 8 typedef struct _name_list
 9 {
10     NmaeType name[81];
11     struct _name_list *next;
12 }Name_List;
13 
14 void convert_the_list(Name_List **);
15 void print_list(Name_List *const, const char *);
16 
17 #endif // !CONVERT
 1 //Convert.cpp
 2 
 3 #include "convert_plug.h"
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     FILE *fp = fopen("D:\\input.txt", "r");
10     Name_List *head = NULL, *tmpCell = NULL, *listPre = NULL;
11 
12     for (;!feof(fp);)
13     {
14         tmpCell = (Name_List *)malloc(sizeof(Name_List));
15         fscanf(fp, "%s", tmpCell->name);
16 
17         if (!listPre)
18             head = tmpCell;//如果是空链表则创建链表头
19         else         
20             listPre->next = tmpCell;//如果不是,则上一个链表要连到当前链表上
21 
22         listPre = tmpCell, listPre->next = NULL;
23     }
24     print_list(head,"反转前:");
25     convert_the_list(&head);
26     print_list(head,"反转后:");
27 
28     fclose(fp);
29     system("pause");
30     return 0;
31 }
32 
33 void print_list(Name_List *const listHead, const char *inform)
34 {
35     //输出所有链表的值
36     Name_List *tmpCell = listHead;
37     printf("%s", inform);
38     for (; tmpCell != NULL; tmpCell = tmpCell->next)
39         printf("%s ", tmpCell->name);
40     printf("\n");
41 }
42 
43 void convert_the_list(Name_List **listHead)
44 {
45     if (listHead == NULL)
46         return;
47     Name_List 
48           *listTmpCur = *listHead
49         , *listTmpNext = (*listHead)->next
50         , *listTmpPre = NULL;
51 
52     for (;listTmpNext != NULL;)
53     {
54         listTmpCur->next = listTmpPre;
55         listTmpPre = listTmpCur;
56         listTmpCur = listTmpNext;
57         listTmpNext = listTmpNext->next;
58     }
59     listTmpCur->next = listTmpPre;
60     *listHead = listTmpCur;
61 
62 }

 

以上是关于Alogorim:链表原地反转Demo的主要内容,如果未能解决你的问题,请参考以下文章

C语言反转单向链表的代码

get 到O反转链表(尾插法)的那个点

leetcode-206-反转链表

剑指offer demo之单链表反转

剑指offer demo之单链表反转

go 反转字符串(原地反转)