【说明】:直接看代码,注解详细
package com.yang.list;
/**
* 单向链表的反转,
*/
public class reverseLinkLIst {
//内部类定义结点
public static class Node{
public Object item; //保存数据
public Node next; //保存下一个结点的位置
public Node(Object item, Node next) {
this.item = item;
this.next = next;
}
}
public static void main(String[] args) {
//建一个链表
Node a=new Node(4,null);
Node b=new Node(3,a);
Node c=new Node(2,b);
Node d=new Node(1,c);
System.out.println("反转前链表:");
printLinkList(d);
System.out.println();
System.out.println("反转后的链表:");
reverseLinkList(d);
printLinkList(a);
}
/**
* 实现链表的反转
* @param head:需要反转的单链表的头结点
*/
public static Node reverseLinkList(Node head){
//1.判断单链表是否只有一个结点,或者为空
if(head==null||head.next==null){
return head;
}
//2.定义一个结点,用于保存反转后链表的头结点
Node reverse=null;
//3.循环,开始单链表的反转
while (head!=null){
//4.获得head的下一个结点
Node temp=head.next;
//5.将head插到反转后链表的最前面
head.next=reverse;
//6.更新反转后链表的头结点
reverse=head;
//7.更新需要反转的链表的头结点
head=temp;
}
return reverse;
}
/**
* 打印链表的数据
* @param head:链表的头结点
*/
public static void printLinkList(Node head){
while (head!=null){
System.out.print(head.item+" ");
head=head.next;
}
}
}