1:迭代法
public class Link1 {
private int data;
private Link1 next;
public Link1(int data){
this.data = data;
this.next = null;
}
public int getData(){
return data;
}
public void setData(int data){
this.data = data;
}
public Link1 getNext(){
return next;
}
public void setNext(Link1 next){
this.next = next;
}
public static Link1 reverse(Link1 head){
if(head == null){
return head;
}
Link1 prevNode = head;//前一个指针
Link1 curNode = head.getNext();//后一个指针
Link1 next;
while(curNode != null){
next = curNode.getNext();
curNode.setNext(prevNode);
prevNode = curNode;//指针后移
curNode = next;//指针后移
}
head.setNext(null);
head = prevNode;
return head;
}
public static void main(String[] args){
Link1 node1 = new Link1(1);
Link1 node2 = new Link1(2);
Link1 node3 = new Link1(3);
Link1 node4 = new Link1(4);
Link1 node5 = new Link1(5);
node1.setNext(node2);
node2.setNext(node3);
node3.setNext(node4);
node4.setNext(node5);
node1 = reverse(node1);
while(node1 != null){
System.out.print(node1.getData() + " ");
node1 = node1.getNext();
}
}
}
运行结果:
5 4 3 2 1
2:递归法
public static Link1 reverse(Link1 head){
//如果当前结点为null,或者当前结点没有后续结点时,递归退出
if(head.getNext() == null || head == null){
return head;
}
//当前结点不为null,并且有后续结点,用递归法进行反转
Link1 curNode = reverse(head.getNext());
head.getNext().setNext(head);//反转当前结点和它的后续结点
head.setNext(null);
return curNode;
}
本文介绍了如何使用Java通过迭代和递归两种方法来反转单链表,提供了详细的运行结果展示。
50

被折叠的 条评论
为什么被折叠?



