LeetCode206反转链表(java实现)

今天带来的题目解析是leetcode206,反转链表,我们来看下题目描述
LeetCode206反转链表(java实现)_第1张图片
如何实现链表的反转呢?我在这里提供的思路是双指针的思路。
具体的思路如下:
假设我们的原链表如下
在这里插入图片描述

首先定义一个指针pre,用于指向head之前的位置,那么我们初始可以将它置为NULL因为链表反转之后第一个节点的next就是null。
也就是如下图所示。
LeetCode206反转链表(java实现)_第2张图片
我们首先定义cur用于指向head,我们要进行反转链表首先,要先将cur.next的位置用临时节点进行保存,也就是上图的temp,然后是将cur.next赋值给pre节点,然后将pre和cur后移,继续遍历链表。
这里需要注意的是,也就是pre和cur后移时
LeetCode206反转链表(java实现)_第3张图片
这两行代码的位置是先将pre=cur,然后是将cur=temp;假如交换这两行代码的位置就会导致后续pre=cur时赋值的是错误的cur位置。
最后将pre进行返回即可。
具体的代码如下

class Solution {
    public ListNode reverseList(ListNode head) {
	       ListNode cur = head;
	        //pre指针一直在cur前面
	       ListNode pre = null;
	       //定义临时节点主要是存放cur.next节点。
	        ListNode temp=null;
	        while (cur!=null){
	            //用临时节点存放cur.next
	            temp=cur.next;
	            //将cur的next指向pre
	            cur.next=pre;
	            //移动pre和cur位置
	            pre=cur;
	            cur=temp;
	        }
	        return pre;

    }
}

那么本次题目解析就到这里结束了,希望对你有帮助!

你可能感兴趣的:(链表,java,数据结构)