对实际问题的解决手段
需求:单链表的反转
大致思路:
先遍历链表,创建新链表,取出一个节点,让取出的节点,放到新链表的头部。以此循环。
// 百度面试题:将单链表反转
public static void reversetList(HeroNode head) {
// 如果当前链表为空或者只有一个节点。无需反转,直接返回
if (head.next == null || head.next.next == null) {
return;
}
// 定义一个辅助的指针,帮组我们遍历原来的列表
HeroNode cur = head.next;
// 指向当前节点的下一个节点
HeroNode next = null;
HeroNode reverseHead = new HeroNode(0, "", "");
// 遍历原来的链表,并完成从头遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead的最前端
while (cur != null) {
next = cur.next; // 先暂时的保存当前节点的下一个节点,因为后面需要使用
cur.next = reverseHead.next; // 将cur的下一个节点指向新的链表的头部
reverseHead.next = cur; // 将cur 连接到新的链表上
cur = next; // 让cur后移
}
// 将head.next 指向reverseHead,实现单链表的反转
head.next = reverseHead.next;
}
总结:一定不要让下一个节点回收。