链表反转C实现(递归与循环) 1//逆转链表http://blog.163.com/lichunliang1988116@126/blog/static/26599443201282083655446/2#include<iostream.h>3#include<stdlib.h>4typedefstructNode5{6intdata;7Node *next;8}*Linklist,ListNode;9voidinitLink(Linklist *head)10{1112Node *node=(Node *)malloc(sizeof(N...
72/*用键盘输入初始化一个链表,参数为链表头指针地址*/73voidInitializeLinkList(LinkList * Head) 74 { 75 pNode EndNode=*Head;/*总是指向链表最后一个节点*/76 77 pNode TempNode=NULL;/*临时节点,存放当前输入的链表节点*/78inti=1;/*节点记数*/79chargetEnter; 80 81 printf("please input charact...
反转链表的顺序是将链表中的节点顺序颠倒过来。具体实现方法如下: 1. 定义三个指针:prev、curr和next。初始时,prev指向null,curr指向链表的头节点,next指向curr的下一个...
递归首先是直接“找到”最后一个节点“(反向链表的根节点)并返回,以后每次递归完成都返回这个根节点。假设此时程序执行到返回根节点处,下一步我们需要将根节点指向当前递归的节点(node.next.next = node。这里没有使用header.next = node是因为我们每次需要返回这个header,如果使用header.next那么每次赋值都会覆盖上一次...
其实,这个递归版反转算法有个小缺陷:那就是整个递归完成时,返回的节点就是传入的参数。也就是说,如果传入的是反转前的单向链表首节点,那么最终返回的也是这个节点,而这个节点却是反转后的单向链表的尾节点(因为反转了,首尾交换)。因此,使用时,需要做些微不足道的工作来弥补缺陷。即:在使用前需要先对单向链表进行...