面试遇到一个单向链表逆转的问题,回来后,亲自写了一遍。
public class ReverseList {
public static void main(String[] args) {
Node head = add(null, "a");
add(head, "b");
add(head, "c");
add(head, "d");
add(head, "e");
print(head);
head = reverse(head);
print(head);
}
//核心方法
public static Node reverse(Node head) {
if (head == null) {
return null;
}
Node next = head.next;//下一个结点
head.next = null; // 这个必须的,否则链表就成有环的了。
while (next != null) {
Node temp = next.next;
next.next = head;
head = next;
next = temp;
}
return head;
}
// 添加数据
public static Node add(Node head, String data) {
if (head == null) {
return new Node(data);
} else {
while (head.next != null) {
head = head.next;
}
head.next = new Node(data);
return head;
}
}
// 打印数据
public static void print(Node head) {
if (head == null) {
System.out.println("null");
} else {
while (head != null) {
System.out.print(head.data + "\t");
head = head.next;
}
System.out.print("\n");
}
}
}
class Node {
String data;
Node next;
public Node(String data2) {
this.data = data2;
}
public String toString() {
return data;
};
}
打印结果: