题解 | 反转链表

反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

假如说这是我们的链表,结构如下图所示:

alt

第一步:定义3个指针变量,pre(序节点)、cur(当前操作的节点)和nxt(当前操作的下一个节点),结构如下图所示:

alt

第二步:通过更改刚刚定义的3个指针变量反转链表节点。

  • 更改pre的指针域(next)指向:

alt

  • 更改cur的指针域(next)指向:

    首先更改cur的指针域(next)指向,让它指向pre;之后再移动pre到cur除,最后移动cur到nxt处。

alt

这时,已经完成了链表的第一个和第二节点的反转。

第三步:重复第二步的操作,直到链表的所有节点反转完成。

如果cur指针变量指向的节点为Null时,就说明所有节点都完成了反转,循环退出,因此反转链表循环的条件:cur!=NUll。

最后返回反转之后的头结点,头结点就是pre所指向的内容。

alt

如果文字描述的不太清楚,你可以参考视频的详细讲解: 链接B站@好易学数据结构

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 pHead) {
        // write code here
        if (pHead == null) {
            return pHead;
        }
        ListNode pre = null;//前序节点
        ListNode cur = pHead; //(操作的)当前节点
        ListNode nxt = pHead; //下一个节点
        while (cur != null) {
            nxt = cur.next;//移动nxt指针
            cur.next = pre;// 更改当前节点(cur)指针域的指向
            pre = cur;//移动pre指针
            cur = nxt;//移动cur指针
        }
        return pre;//返回反转之后的头结点
    }
}

如果上面的代码理解的不是很清楚,你可以参考视频的详细讲解:链接B站@好易学数据结构

#笔试#
全部评论

相关推荐

评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务