题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { // 单链表里面只存了后节点,并且只能从第一个节点开始查找 public ListNode ReverseList(ListNode head) { // 一个或者为空的情况 if( head == null || head.next == null){ return head; } // 定义两个个指针,分别指向当前节点的前节点和后节点 ListNode pre = null , next = null; while(head != null){ // 当前节点的后节点要取出来,等会要把它变成当前节点 next = head.next; // 把前节点变成当前节点的后节点,这样就实现了反转 head.next = pre; // 然后当前节点现在变成前节点 pre = head; // 后面的节点变成当前节点 head = next; } return pre; } }
之前对ListNode这种数据结构不是很熟悉,导致理解了很久。
把ListNode看作两个部分来理解,当前的节点的元素,以及下一个指针的元素。
输入的链表,其实也就是两个两个连起来的,一个接一个组成了链表。
反转也一样。
比如一开始输入 1 2 3 4,头节点head就是1,指向了2;然后2 指向了 3;3指向了4。
反转就是,首先把前节点pre赋值为null,然后把它作为当前节点的后节点,也就是,1指向了null,2指向了1,3指向了2,4指向了3。这样就很好理解了。