反转链表就是更改链表的当前节点和下一个节点的指向,例如:1->2->3 反转之后就是3->2->1,咱们采用遍历法作题分析,步骤以下:java
public Node reverseLink(Node head){
if(head == null)return;
Node pre = head;
Node cur = head.next;
Node tmp;
while (cur != null){
//保存next域
tmp = cur.next;
//修改next的指向
cur.next = pre;
//遍历下一个节点
pre = cur;
cur = tmp;
}
// 最后旧链表的next域设为null
head.next = null;
return pre;
}
/**
* data 表明当前节点的值
* next 表明下一个节点
* */
public class Node {
public Node next = null;
public int data;
public Node(int data){
this.data = data;
}
}
复制代码
有部分同窗在早期没有敲过完整的链表,只看片断,有时候很难理解,这里我补充详细一点,直接能够复制运行:bash
public class LinkTest{
/**
* 向链表中加入节点,添加节点是在最尾部加,也就是新建链表
* */
public void addNode(int data){
Node newNode = new Node(data);
if (head == null){
head = newNode;
return;
}
Node tmp = head;
//查找最后一个节点
while (tmp.next != null){
tmp = tmp.next;
}
tmp.next = newNode;
}
}
public class Main {
public static void main(String[] args){
operateLink();
}
private static void operateLink() {
LinkTest linkTest = new LinkTest();
for (int i = 1; i < 7; i++){
linkTest.addNode(i);
}
linkTest.reverseLink(linkTest.head);
}
复制代码
好了,代码看上去很简单,可是理解起来不是那么容易,链表的题目读者最好是在草稿纸上画画图,这样思路会更加清晰。ui
ps:若是对您有帮助,麻烦点个赞,谢谢您的阅读。this