package algorithm.linkedlist;
/**
* @Created by XDarker
* @Description 反转单链表
* @Date 2019/10/13 16:41
*/
public class ReverseLinkedList {
public static void main(String[] args) {
Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
System.out.println("========链表========");
list(head);
System.out.println("========反转链表========");
Node reverseList = reverseList(head);
list(reverseList);
}
public static Node reverseList(Node head) {
if (head == null || head.next == null) {
return head;
}
//定义一个辅助的指针(变量),帮助我们遍历原来的链表
Node cur = head;
// 指向当前节点[cur]的下一个节点
Node next = null;
Node reverseHead = null;
//遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端
while (cur != null) {
//先暂时保存当前节点的下一个节点,因为后面需要使用
next = cur.next;
//将cur的下一个节点指向新的链表的最前端
cur.next = reverseHead;
//将cur 连接到新的链表上
reverseHead = cur;
//让cur后移
cur = next;
}
return reverseHead;
}
/**
* 显示链表
*/
public static void list(Node head) {
if (head == null) {
System.out.println("链表为空");
return;
}
Node temp = head;
System.out.print("链表内容:");
while (temp != null) {
System.out.print(temp.data + " ");
temp = temp.next;
}
System.out.println();
}
}
class Node {
Node next = null;//下一个结点
int data;//结点数据
public Node(int data) {
this.data = data;
}
}