要点:
单链表反转 要求空间复杂度O(1),时间复杂度O(n)。
先从头节点遍历到尾节点,
调用递归函数返回新的头节点,
再执行反转操作。
代码:
public class ReverseList {
public static void main(String[] args) {
ReNode n1 = new ReNode(1);
ReNode n2 = new ReNode(2);
ReNode n3 = new ReNode(3);
ReNode n4 = new ReNode(4);
ReNode n5 = new ReNode(5);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
print(n1);
ReNode newHead = reverse(n1);
print(newHead);
}
static ReNode reverse(ReNode head) {
if (head == null || head.next == null) {
return head;
}
ReNode newHead = reverse(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
static void print(ReNode head) {
ReNode tmp = head;
System.out.println(tmp.value);
while (tmp.next != null) {
tmp = tmp.next;
System.out.println(tmp.value);
}
System.out.println();
System.out.println();
}
}
class ReNode {
int value;
ReNode next;
public ReNode(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public ReNode getNext() {
return next;
}
public void setNext(ReNode next) {
this.next = next;
}
}