写算法第一天--反转链表
先建立一个简单链表
/**
* @ClassName ListNode
* @description: TODO
* @Author: hdt
* @createDate: 2023/5/4
* @version: 1.0
*/
public class ListNode {
//数据
String data;
//下一个节点
ListNode next;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
}
实现链表反转,尾插入添加
/**
* @ClassName TestListNode
* @description: TODO
* @Author: hdt
* @createDate: 2023/5/4
* @version: 1.0
*/
public class TestListNode {
public static void main(String[] args) {
ListNode head=new ListNode();
head.setData("0");
for(int i=1;i<5;i++){
ListNode next=new ListNode();
next.setData(""+i);
//尾插法,找到最后一个添加
ListNode mid=head;
while(mid.getNext()!=null){
mid=mid.getNext();
}
mid.setNext(next);
}
//顺序遍历
System.out.println("顺序遍历");
ListNode mid=head.getNext();
System.out.print(head.getData());
while (mid!=null){
System.out.print("<--"+mid.getData());
mid=mid.getNext();
}
System.out.println("");
//反转
ListNode reversal = reversal(head);
//反转后遍历
System.out.println("反转后遍历");
mid=reversal.getNext();
System.out.print(reversal.getData());
while (mid!=null){
System.out.print("<--"+mid.getData());
mid=mid.getNext();
}
}
//反转链表
public static ListNode reversal(ListNode listNode) {
//前一个节点
ListNode pre = null;
//当前节点
ListNode cur = listNode;
while (cur != null) {
//取出下已个,
ListNode next = cur.next;
//截断链表,让当前的下一个指向前一个
cur.next = pre;
//让当前,变成前一个
pre = cur;
//他的下一个变成当前
cur = next;
}
return pre;
}
}
总体思路就是利用中间变量来实现,
结果: