单链表反转的几种方法
来源:互联网 发布:java认证培训 编辑:程序博客网 时间:2024/06/06 10:01
反转链表,将单链表倒置输出
这个也算是很多面试题里常考的题,刚复习完单链表在这记录一下这几种方法,做个笔记
//链表反转1 创建一个新的链表,遍历原链表头插到新链表 LinkedList listReverseList(LinkedList L) { LinkedList temp = L->next; LinkedList start = listCreatNode(NULL);//创建一个新的链表 if(start == NULL) { perror("listCreatNode err"); return NULL; } while(temp) { LinkedList node = listCreatNode(temp->data); if(node == NULL) { perror("listCreatNode err"); return NULL; } node->next = start->next; start->next = node; temp = temp->next; } return start; } // int listReverseList2(LinkedList L) { /* * 先让头结点下一跳指向第三个结点,然后让第二个结点指向第四个结点 * 最后让第三个结点的下一跳指向第二个结点 从第二个结点开始,每次循环向后步进一,把这个结点头插到头结点后边 H-->N2-->N3-->N4-->N5 H-->N3-->N2-->N4-->N5 H-->N4-->N3-->N2-->N5 H-->N5-->N4-->N3-->N2 */ LinkedList temp = L->next; //指向第二个结点 LinkedList p = NULL; //中间变量 while(temp->next) //从第二个结点开始遍历 { p = temp->next; //指向当前操作结点 temp->next = p->next; //让前一结点下一跳指向后一结点(对操作结点来说) p->next = L->next; //让操作结点下一跳指向前一结点(头插法) L->next = p; //头结点的下一跳指向操作结点(操作结点与第二结点互换了) } return 0; } // int listReverseList3(LinkedList L) { /* * 让下一个结点指向上一个结点,第一个结点指向NULL */ LinkedList temp = L->next; //指向第二个结点 LinkedList p = NULL; //中间变量 LinkedList n = NULL; //新链表终结点 while(temp) //让下一个结点指向上一个结点 { p = temp->next; //p指向temp的下一个结点 temp->next = n; //下一个指向上一个(第一次时指向NULL,作为终结点) n = temp; //新链表向后移 temp = p; // } L->next = n; return 0; }
阅读全文
0 0
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 反转单链表的几种方法
- 单链表反转的几种方法
- 数据结构与算法,反转单链表的几种方法
- 链表反转的几种方法
- Python字符串反转的几种方法
- 字符串反转的几种方法
- 字符串实现反转的几种方法
- 字符串反转的几种简单方法
- 反转链表的几种方法
- addEventlistener()方法
- 在CentOS中搭建服务器环境并且发布war包
- 关于类成员函数指针的再研究
- linux Ubuntu 新加磁盘的永久加载方法
- javaScript中的相等性判断
- 单链表反转的几种方法
- VUE 文件高亮显示标签
- web——滚动事件(一)
- avplayer视频重复循环播放,视频重播
- ES6——解构赋值
- rocketMQ nameSrv原理解析
- 秋招总结腾讯
- JavaScript基础—计算鼠标偏移量
- Ubuntu16.04里django的配置和安装