206. Reverse Linked List
遍历反转法
遍历反转法是从前往后依次反转当前结点的指针域的指向,使其指向前一个节点。
基本思路:将当前节点cur的下一个节点 cur.next缓存到temp后,然后令当前节点指针指向前一结点pre。在更改反转当前结点指针域前,要把指针域用tmp临时保存,以便于下一次使用。
pre:前一结点
cur: 当前结点
tmp: 临时结点,用于保存当前结点的指针域(即下一结点)
pre:前一结点
cur: 当前结点
tmp: 临时结点,用于保存当前结点的指针域(即下一结点)
Java链表节点定义:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
反转代码如下
public class Solution {
public ListNode reverseList(ListNode head) {
if(head==null){
return head;}
ListNode pre = head;
ListNode cur = head.next;// 当前结点
ListNode tmp;// 临时节点,用于保存当前结点的指针域(即下一结点)
while(cur!=null){
tmp = cur.next;
cur.next = pre;//令指针域的指向前一节点
//下一个节点
pre=cur;
cur=tmp;
}
//将原链表头节点的指针域置为null,返回新链表的头结点,即原链表的尾结点
head.next=null;
return pre;
}
}