方法一:非递归实现,使用三个指针。
Java代码如下:
package com.yiguy.test;
class Node{
int data;
Node next;
Node(){
}
Node(int dataParam){
this.data = dataParam;
this.next = null;
}
}
public class List {
// 反转链表,返回值为:反转之后的头结点
public static Node reverse(Node head){
if(head == null || head.next == null){
return head;
}
// 头结点的反转单独处理
Node previous = head;
Node current = previous.next;
Node next;
if(current != null){
next = current.next;
current.next = previous;
previous.next = null;
// 处理剩余部分
previous = current;
current = next;
while(current != null){
next = current.next;
current.next = previous;
previous = current;
current = next;
}
}
return previous;
}
public static void main(String[] args) {
Node head = new Node(1);
Node node1 = new Node(2);
Node node2 = new Node(3);
Node node3 = new Node(4);
Node node4 = new Node(5);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
Node newHead = List.reverse(head);
while(newHead != null){
System.out.print(newHead.data + " ");
newHead = newHead.next;
}
}
}
方法二:递归实现
package com.yiguy.test;
class Node {
int data;
Node next;
Node() {
}
Node(int dataParam) {
this.data = dataParam;
this.next = null;
}
}
public class List {
// 反转链表,返回值为:反转之后的头结点
public static Node reverse(Node head) {
if (head == null || head.next == null) {
return head;
}
Node newHead = reverse(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
public static void main(String[] args) {
Node head = new Node(1);
Node node1 = new Node(2);
Node node2 = new Node(3);
Node node3 = new Node(4);
Node node4 = new Node(5);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
Node newHead = List.reverse(head);
while (newHead != null) {
System.out.print(newHead.data + " ");
newHead = newHead.next;
}
}
}