华为外包java面试题-Java实现单链表的逆序
假设你正在应聘华为外包公司的Java开发岗位,以下是一个可能的面试题案例:
面试题目:Java实现单链表的逆序
问题描述:
请编写一个Java程序,实现对单链表的逆序操作。给定一个单链表的头节点,要求将链表的所有节点反转,并返回反转后的头节点。
示例:
假设链表为:1 -> 2 -> 3 -> 4 -> 5
反转后应该为:5 -> 4 -> 3 -> 2 -> 1
解题思路:
实现单链表的逆序操作可以使用迭代或递归的方法。下面将为大家提供使用迭代的解题思路。
解题步骤:
1. 定义三个指针:prev(记录前一个节点)、current(记录当前节点)、next(记录当前节点的下一个节点)。
2. 初始时,prev指向null,current指向头节点。
3. 在循环中,将current的next指针指向prev,然后将prev指向current,current指向next。
4. 重复上述步骤,直到current指向null(到达链表的末尾)。
Java代码实现:
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class ReverseLinkedList {
public ListNode reverse(ListNode head) {
ListNode prev = null;
ListNode current = head;
ListNode next = null;
while (current != null) {
next = current.next; // 先保存当前节点的下一个节点
current.next = prev; // 当前节点的next指针指向前一个节点
prev = current; // prev指向当前节点,相当于前移一步
current = next; // current指向下一个节点,相当于前移一步
}
return prev; // prev指向原链表的最后一个节点,即反转后的头节点
}
// 测试
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
ReverseLinkedList solution = new ReverseLinkedList();
ListNode reversedHead = solution.reverse(head);
// 打印反转后的链表
while (reversedHead != null) {
System.out.print(reversedHead.val + " -> ");
reversedHead = reversedHead.next;
}
System.out.print("null");
}
}
这是一个典型的面试题目,面试官可能会根据你的解答展开更多问题,例如如何使用递归实现链表逆序,或者如何处理特殊情况(如空链表)。在面试过程中,除了正确的解答问题,展示良好的沟通和思考能力也是非常重要的。希望以上面试题案例对你有所帮助!
猜你喜欢LIKE
相关推荐HOT
更多>>什么是java的内存模型?
Java内存模型(JavaMemoryModel,JMM)是一种规范,定义了在多线程环境下,Java程序如何与内存进行交互。它描述了线程如何与主内存和工作内存进行...详情>>
2023-06-30 11:44:07JavaScript全解析——案例-验证码按钮倒计时
JavaScript全解析——案例-验证码按钮倒计时
算法评测标准---空间复杂度是什么?
算法评测标准---空间复杂度是什么?空间复杂度是什么?一. 空间复杂度的概念,复杂度(Space Complexity),是对一个算法在运行过程中临时占用存...详情>>
2023-03-23 20:15:04怎么用css画三角形?
怎么用css画三角形?border这里的像素值 和 border-left这里的像素值可以是不一样的,也可以是一样的,根据三角形的形状来进行具体设置值即可,要...详情>>
2023-03-23 15:27:16热门推荐
华为外包java面试题-Java实现单链表的逆序
沸Java中的异常处理机制是什么?请解释try-catch-finally块的作用
热什么是java的内存模型?
热javascript中date对象的用法详解
新使用maven方式构建springboot项目的步骤是什么?
1分钟学会js对象的创建和使用方法
css阴影效果属性:box-shadow属性详解
javascriptswitch语句的用法是什么?举个例子
数组和对象的解构赋值怎么实现?
java中怎么清空数组中的元素?
微服务开发框架优势与特点分别是什么?
什么叫做全局执行上下文?
JavaScript全解析——案例-验证码按钮倒计时
hooks模仿componentDidMount是什么