单链表的反转
来源:互联网 发布:淘宝卖家售假被扣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; }
阅读全文
0 0
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转 c++
- 单链表的反转
- 单链表的反转
- 单链表的反转问题
- 单链表的反转实现
- 2、单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表反转的实现
- 单链表的反转
- 单链表的反转
- 计算单词个数
- 按照“1 1 2 3 5 8 13 21”这个规律算出第五十个数是多少;
- HDU-6015 Skip the Class
- ubuntu防火墙操作
- AndroidStudio 中开启Java8语法和Retrolambda库的使用
- 单链表的反转
- 如何新建java项目
- C++的标准输出和读写文件
- Effective C++ 3. Use const whenever posible
- 设计模式之二:Builder模式
- HDU-6019 MG loves gold
- ossec启动报ossec-remoted(1206): ERROR: Unable to Bind port错误解决方法
- Android中隐式跳转到系统设置界面(意图对象)
- (M)Backtracking: 93. Restore IP Addresses