简述Java实现单链表翻转 ?
参考答案:
在Java中,翻转单链表通常涉及更改每个节点的next
指针的指向,使其指向前一个节点,而不是后一个节点。以下是一个简单的Java方法,用于翻转一个单链表:
首先,我们定义一个简单的单链表节点类:
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
然后,我们可以编写一个方法来翻转这个链表:
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
}
这个方法使用三个指针:prev
,curr
,和nextTemp
。prev
和curr
分别指向当前节点的前一个节点和当前节点,nextTemp
用于临时存储当前节点的下一个节点。在每次循环中,我们首先将curr
的next
指针指向前一个节点prev
,然后将prev
和curr
都向前移动一步。最后,当curr
为空时,prev
就是新的头节点,我们返回prev
即可。
这种方法的时间复杂度为O(n),其中n是链表的长度,因为我们需要遍历每个节点一次。空间复杂度为O(1),因为我们只使用了常数个额外的变量。