题解 | 反转链表 | Java
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
考察知识点:
题目考察链表操作的知识点
题目思路分析:
对于反转链表,有以下的情况:
- 空链表,或者只有头节点的情况 {Null} {1->Null}
- 头节点后面只有一个节点的情况 {1->2->Null}
- 头节点后面有多个节点的情况 {1->2->3-...->8->Null}
使用pre变量初始化指向头节点,node变量指向首元节点
对于第一种情况直接将链表返回即可,不用改变。对应代码23行
对于头节点后面只有一个节点的情况,及首元节点后面就是Null的时候,需要做的是将头节点和首元节点进行反转,此时25行判断后会跳过循环直接进入31-33行,反转首元节点和头节点并将头节点尾部赋予Null指针,然后返回。
对于第三种情况,需要的是不断循环以下步骤
- 将当前节点的next指向前一个节点
- 将当前节点(node)的前一个节点(pre)更新,pre指向node
- 更新当前节点(node),让其指向他的下一个节点(tail)
循环这个过程,直到当前节点node已经到达尾部(node.next==null成立的时候)
此时手动更新node指向前一个节点pre即可
并且将头节点的next指针进行更新即可完成整个链表的反转。
语言选择:
Java
完整代码:
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode ReverseList (ListNode head) {
// write code here
if(head==null||head.next==null) return head; //特殊情况直接返回
ListNode pre = head, node = head.next; //用于指定当前节点的前面节点和当前节点
while(node.next!=null){
ListNode tail = node.next; //当前节点的后一个节点
node.next = pre;
pre = node;
node = tail;
}
node.next = pre;
head.next = null;
return node;
}
}
#刷题##高频算法题#
安克创新 Anker公司福利 592人发布