一.题目要求
二.思路:
将链表反转,就是将每个表元的指针从向后变成向前,那我们可以遍历原始链表,将遇到的节点一一指针逆向即可。指针怎么逆向?不过就是断掉当前节点向后的指针,改为向前罢了。
cur.next = pre
三.具体过程:
step 1:优先处理空链表,空链表不需要反转。
step 2:我们可以设置两个指针,一个当前节点的指针,一个上一个节点的指针(初始为空)。
step 3:遍历整个链表,每到一个节点,断开当前节点与后面节点的指针,并用临时变量记录后一个节点,然后当前节点指向上一个节点,即可以将指针逆向。
step 4:再轮换当前指针与上一个指针,让它们进入下一个节点及下一个节点的前序节点。
代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
//题解这是一个单向链表,头指向下一个
ListNode pre = null;
//从头开始处理
ListNode cur = head;
//缓存旧值,然后进行指向调换
while(cur != null){
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}