完整代码实例-Java实现 (头插法) 反转单链表
代码示例:
package DataStrcture.ArrayDemo.singlelistdemo;
public class SingleListReverse {
public static class Node{
Node next;
int num;
///构造器
public Node(int num){
this.num = num;
}
///toString
public String toString(){
return "num ="+num;
}
}
Node head= new Node(0);
/*
单链表的反转:
1. 新建一个新的头结点 reverseHead,用来标识从原链表中取下来的结点
2. 每取下来的一个结点,就作为一个新的首元结点, 用reverseHead重新指向这个结点,
之前的结点都处于这个新结点的后面(就是一种头插法)
3. 所有的结点都逆转完毕后, 让head头结点重新替代reverseHead去指向这个逆转后的单链表
*/
Node reverseHead = new Node(0);
public void Reverse(Node head){
Node cur = head.next;///两个作用, 1. 遍历head结点 2. 把head的结点最为反转链表的首元结点
Node cur_next = null;cur_next作用是存储cur在原链表中指向的下一个节点
Node reverseHead = new Node(0);
while(cur!= null){
cur_next = cur.next;
cur.next = reverseHead.next;
reverseHead.next = cur;
cur = cur_next;
}
head.next = reverseHead.next;
}
///结点加入链表
public void add(Node node){
Node temp = head;
while(true){
if(temp.next == null)
break;
temp = temp.next;
}
temp.next = node;
}
///遍历输出
public void list(){
Node temp = head;
while(true){
if(temp.next == null)
return;
temp = temp.next;
System.out.println(temp);
}
}
public Node getHead(){
return head;
}
///测试
public static void main(String[] args) {
SingleListReverse sl = new SingleListReverse();
//结点
Node node_1 = new Node(6);
Node node_2 = new Node(1);
Node node_3 = new Node(7);
Node node_4 = new Node(2);
Node node_5 = new Node(9);
Node node_6 = new Node(5);
///结点加入链表
sl.add(node_1);
sl.add(node_2);
sl.add(node_3);
sl.add(node_4);
sl.add(node_5);
sl.add(node_6);
sl.list();
System.out.println("==================");
sl.Reverse(sl.getHead());
sl.list();
}
}
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)