反轉鏈表就是更改鏈表的當前節點和下一個節點的指向,例如: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