跳到主要内容

简述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;
    }
}

这个方法使用三个指针:prevcurr,和nextTempprevcurr分别指向当前节点的前一个节点和当前节点,nextTemp用于临时存储当前节点的下一个节点。在每次循环中,我们首先将currnext指针指向前一个节点prev,然后将prevcurr都向前移动一步。最后,当curr为空时,prev就是新的头节点,我们返回prev即可。

这种方法的时间复杂度为O(n),其中n是链表的长度,因为我们需要遍历每个节点一次。空间复杂度为O(1),因为我们只使用了常数个额外的变量。