首页 > 代码库 > c 单链表反转(不添加新结点空间)
c 单链表反转(不添加新结点空间)
最近复习考研,加上一直都将"算法"放在很高的位置,所以,蛮重视算法的.不多说了,其实这个问题,不难理解的.
主要代码:
1 //反转单链表. 2 void 3 reverse(linklist lList) { 4 Linknode *pre = NULL; //注意该结点不能再指向别的非空结点. 5 Linknode *cur = lList->next; 6 Linknode *next; 7 while(cur) { 8 next = cur->next; 9 cur->next = pre;10 pre = cur;11 cur = next;12 }13 lList->next = pre;14 }
我最近发现,算法这东西,光靠空想是很痛苦,很难理解的,我建议各位不懂的时候,多用笔,在纸上画图,对于数字型,同样是有效的.
完整代码:
1 #include <stdio.h> 2 #include <malloc.h> 3 4 #define FALSE 0 5 #define TRUE 1 6 7 typedef struct node { 8 int data; 9 struct node *next;10 } Linknode;11 12 typedef Linknode *linklist;13 14 linklist15 init(int);16 17 void18 traverse(linklist);19 20 void21 reverse(linklist);22 23 int24 main(void) {25 int n = 10;26 linklist lList = init(n);27 traverse(lList);28 reverse(lList);29 traverse(lList);30 }31 32 //根据指定结点的个数,初始化一个带有头结点的单链表.33 linklist34 init(int n) {35 linklist lList = (linklist)malloc(sizeof(struct node)); //头结点.36 lList->next = NULL; //初始时链表为空.37 lList->data = http://www.mamicode.com/n; //头结点存储总元素个数.38 if(!lList) {39 printf("out of memory!\n");40 return FALSE;41 }42 int i;43 Linknode * tail = lList;44 for(i = 0; i < n; i++) {45 Linknode * nNew = (Linknode *)malloc(sizeof(struct node));46 if(!nNew) {47 printf("out of memory!\n");48 return FALSE;49 }50 nNew->data = http://www.mamicode.com/i + 1; //为新结点赋值.51 //重新指定尾结点.52 tail->next = nNew;53 tail = nNew;54 nNew->next = NULL;55 }56 return lList;57 }58 59 //遍历单链表所有结点.60 void61 traverse(linklist lList) {62 Linknode * node;63 node = lList->next; //开始时指向第一个结点.64 while(node) {65 printf("%d ", node->data);66 node = node->next;67 }68 printf("\n");69 return;70 }71 72 //反转单链表.73 void74 reverse(linklist lList) {75 Linknode *pre = NULL; //注意该结点不能再指向别的非空结点.76 Linknode *cur = lList->next;77 Linknode *next;78 while(cur) { 79 next = cur->next;80 cur->next = pre;81 pre = cur;82 cur = next;83 }84 lList->next = pre;85 }
我网上搜了一下,有蛮多人写的,我这里就写一种方法就行了,至于开辟新节点空间的方式,我觉得是小儿科的.
c 单链表反转(不添加新结点空间)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。