单链表的反转

来源:互联网 发布:淘宝卖家售假被扣48分 编辑:程序博客网 时间:2024/06/07 14:13
#include <iostream>#include <string>using namespace std;     //使用命名空间 struct node            //定义一个结构体 {char val;          //定义一个字符型变量 struct node * next; //定义一个结构体指针 };typedef struct node NODE;   //为结构体类型重新创建一个名称 typedef NODE * Link;        //为结构体指针重新创建一个名称 /*遍历整个链表*/void out_link(Link pHead){Link temp = pHead->next;     //定义一个临时指针,指向头指针下一个,方便下一次遍历 while(temp)                 //如果temp指针到最后指向NULL后,即跳出循环 {cout<<temp->val;         //输出该指针指向的节点的数值 temp = temp->next;        //指针指向下一个 }}/*翻转整个链表*/void reverse_link(Link pHead) {if(pHead==NULL || pHead->next==NULL || pHead->next->next == NULL)//if(!pHead || !pHead->next || !pHead->next->next)return ;//在这里直接返回函数调用处,下面的语句就不执行了,中断当前函数的执行,把程序控制权交给函数调用者Link p1 = pHead;       //定义三个指针,依次指向头节点,头节点下一个,头节点的下一个下一个 Link p2 = p1->next;     Link p3 = p2->next;while(p3)       //当第三个指针不指向空时,继续执行while里面的语句 {p2->next = p1;       //将p2节点里面的指针由原来指向p3,现在指向p1;   p1 = p2;             //定义的三个指针全部往右移一个节点 p2 = p3;             //注意:上次把这一行与上一行对调了后出现,翻转后只输出原来的最后一个节点的数,并且死循环 p3 = p3->next; } p2->next = p1;    //最后一个节点的指针指向前一个  pHead->next->next = NULL;pHead->next = p2; } /*创建一个链表,传入一个字符串*/ Link create(string & str_link)   {int len = str_link.length();   //计算出这个字符串的长度 Link pHead = new node();       //用new运算符在堆上分配一个结构体的大小的节点 pHead->next = NULL;            //头节点里面的结构体指针指向NULL Link preNode = pHead;          //定义一个结构体指针指向要插入节点的前一个 for(int i=0;i<len;i++)         //实现字符串中的字符循环插入 {Link pNode = new node();  //在堆上分配一个新的节点  pNode->val = str_link[i]; //插入字符 pNode->next = NULL;        //将新分配的节点中的结构体指针指向NULL preNode->next = pNode;    //实现新的节点实现尾插preNode = pNode;          //将preNode指针指向该链表的最后一个 }return pHead;                 //返回链表头指针指向的位置 }void reverse_test(){string str;cout<<"输入一个字符串:\n";cin>>str;Link pHead = create(str);     //创建一个链表,将字符串中的每个字符分配到每个节点,返回头指针的位置out_link(pHead);        //遍历整个链表 reverse_link(pHead) ;    //翻转整个链表 cout<<endl;out_link(pHead);        //遍历整个链表 } int main(int argc,char **argv){reverse_test();     //测试输出一个逆序的字符串 return 0; } 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 久而不射,但软了怎么办 盆底综合肌力1级怎么办 头发掉的厉害怎么办吃什么好 给蜂蛰了肿了痒怎么办 小米手环2没电了怎么办 小米手环2不亮了怎么办 红米3s无限重启怎么办 乐视手机1s卡顿怎么办 老公出轨了怎么办你会选择离婚吗 c盘和d盘换换了怎么办 晚上2点到3点醒怎么办 红米3s变砖了怎么办 6s锁屏密码忘了怎么办 怀孕9个月了胃疼怎么办 怀孕6个月了胃疼怎么办 孕妇胃疼怎么办4个月了 25岁欠了5万块钱怎么办 感冒嗓子疼怎么办最简单的方法 和老婆离婚了我的心好痛怎么办 4s店不给退定金怎么办 教你闪腰了后该怎么办 coolpad酷派手机开不了机怎么办 苹果5s黑屏开不了机怎么办 苹果4s的屏坏了怎么办 苹果6手机充电口接触不良怎么办 5s用久了卡顿怎么办 孕妇血糖高怎么办什么方法降最好 脚砸了肿了紫了怎么办 我想在淘宝上卖东西该怎么办 苹果手机4s开不了机怎么办 冒险岛s前出2条怎么办 狗狗又吐又拉血怎么办 小孩上网成瘾怎么办父母要怎么做 一只眼睛大一只眼睛小怎么办 带近视镜时间长了眼睛变形怎么办 联通卡2g换4g卡怎么办 上火牙疼怎么办教你立刻止疼 吃热的凉的牙疼怎么办 我买的股票退市了怎么办 如果起诉离婚另一方不出庭怎么办 10个月宝宝还没长牙怎么办