您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java怎么实现反转链表
反转链表是数据结构与算法中的经典问题,也是面试高频考点。本文将介绍Java中两种常见的反转链表实现方法:**迭代法**和**递归法**,并提供完整代码示例。
## 一、链表节点定义
首先定义链表节点类:
```java
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
时间复杂度O(n),空间复杂度O(1)
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next; // 临时保存下一个节点
curr.next = prev; // 反转指针方向
prev = curr; // prev指针后移
curr = nextTemp; // curr指针后移
}
return prev; // 新链表头节点
}
时间复杂度O(n),空间复杂度O(n)(栈空间)
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head; // 反转指针方向
head.next = null; // 断开原指针
return newHead;
}
方法 | 优点 | 缺点 |
---|---|---|
迭代法 | 空间效率高 | 代码逻辑相对复杂 |
递归法 | 代码简洁直观 | 栈溢出风险(长链表) |
// 输入: 1->2->3->4->5->NULL
// 输出: 5->4->3->2->1->NULL
ListNode head = new ListNode(1);
head.next = new ListNode(2);
// ...构建链表
ListNode reversed = reverseList(head);
掌握这两种实现方式可以帮助开发者深入理解链表结构和指针操作,建议同时掌握两种写法以应对不同场景需求。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。