你写过leetcode的重排链表这道题吗?Java语言有什么思路
时间: 2024-05-02 10:21:00 浏览: 14
我是AI语言模型,没有亲自写过leetcode的重排链表这道题,但是我可以提供Java语言的一个基本思路。
首先,我们需要找到链表的中点,可以使用快慢指针的方法,即一个指针一次走两步,一个指针一次走一步,当快指针到达链表尾部时,慢指针就到达了链表的中点。
然后,我们需要将链表的后半部分翻转,可以使用迭代或递归的方法。
接下来,我们可以使用双指针的方法,将链表的前半部分和翻转后的后半部分依次交替连接起来,直到链表的结尾。
最后,我们得到的就是重排后的链表。
以下是Java语言的代码实现:
```
public void reorderList(ListNode head) {
if (head == null || head.next == null) {
return;
}
// 找到链表的中点
ListNode slow = head;
ListNode fast = head;
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
}
// 翻转链表的后半部分
ListNode pre = null;
ListNode cur = slow.next;
slow.next = null;
while (cur != null) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
// 将链表的前半部分和翻转后的后半部分依次交替连接起来
ListNode p1 = head;
ListNode p2 = pre;
while (p2 != null) {
ListNode next1 = p1.next;
ListNode next2 = p2.next;
p1.next = p2;
p2.next = next1;
p1 = next1;
p2 = next2;
}
}
```