左程云_算法与数据结构 — 链表问题 — 05反转部分单链表
2017-06-26 13:38
387 查看
问题描述
给定头节点head,两个整数from和to,要求在单向链表上把第from到to个节点之间的部分进行反转。思路分析
对输入的from和to进行合理性的判断:遍历链表求出len,1<=from<=to<=len;
同时确定好from的前一个几点和to的下一个节点;
对head节点的重定义:
当在from是要从头开始反转的时候,head应该等于to节点;
若不是则保持原来的节点;
对from和to之间的节点进行反转,参考04问题反转链表思想;
代码实现
package algorithm_zuochengyun; public class CH2_05_reversePart { public static Node reversePart(Node head, int from, int to) { System.out.println("将以head为头节点的链表从第" + from + "个到第" + to + "个之间进行反转。"); int len = 0; Node fpre = null; Node tpos = null; Node curNode = head; // 确定len和fpre,tpos结点; while (curNode != null) { len++; // a?b:c 在这里如果c写null那么当len增大 // 到不符合情况的时候他们就会被设置为null fpre = len == from - 1 ? curNode : fpre; tpos = len == to + 1 ? curNode : tpos; curNode = curNode.next; } // 对输入的from,to进行错误检测 if (from < 1 || from >= to || to > len) { System.out.println("illegle input of from or to ."); return null; } // 对from到to的结点进行反转 Node node1 = null; Node node2 = null; Node next = null; // 首先确定是否从头节点开始反转 node1 = fpre == null ? head : fpre.next; node2 = node1.next; // 因为node1=node(from) // 在最后反转完之后node1是正好在tpos前一个 node1.next = tpos; // 开始反转 while (node2 != tpos) { next = node2.next; node2.next = node1; node1 = node2; node2 = next; } // 对反转完之后链表头进行设置 if (fpre != null) { fpre.next = node1; return head; } return node1; } public static void main(String[] args) { // TODO Auto-generated method stub Node head = Node.init(); Node.Print(head); Node.Print(reversePart(head, 3, 5)); } }
实现结果
问题总结
要注意对细节和边界问题的完善,代码要对特殊例子普遍性覆盖;相关文章推荐
- 左程云_算法与数据结构 — 链表问题 — 01打印两个有序链表的公共部分
- 左程云_算法与数据结构 — 链表问题 — 02在单链表和双链表中删除倒数第K个节点
- 左程云_算法与数据结构 — 链表问题 — Node、DoubleNode、RandomNode类
- 左程云_算法与数据结构 — 链表问题 — 03删除链表的中间节点和a/b处的节点
- 左程云著算法与数据结构题目最优解笔记-反转单双链表
- 左程云_算法与数据结构 — 链表问题 — 04反转单向和双向链表
- 算法与数据结构面试题(7)-链表“香蕉”问题
- 算法导论 第四部分——基本数据结构——第15章:动态规划:背包问题
- 数据结构——单链表(链表操作算法集合)
- 算法系列之-链表反转和链表部分反转
- 设A和B是两个单链表,其表中元素递增有序,使用一算法将A和B归并成一个案元素递减有序的单链表C(该程序中的功能包含了上几个博客中的部分功能)
- 左程云著算法与数据结构题目最优解笔记-链表
- 左程云著算法与数据结构题目最优解笔记-删除无序链表中重复的元素
- 5.数据结构单链表之链表反转
- 韩顺平_PHP程序员玩转算法公开课(第一季)05_使用单链表解决约瑟夫问题_学习笔记_源代码图解_PPT文档整理
- 算法导论 第三部分——基本数据结构——栈、队列、链表、散列表
- 链表问题(3)-- 反转部分单项链表
- 算法与数据结构基础系列(一): 链表的常见问题分析及实现
- 2018.01.08大数据面试题-算法大全-数据结构-算法1-单链表反转
- 链表问题---反转部分单向链表