【图文解析】反转一个单链表

【图文解析】反转一个单链表

例题描述

反转一个链表

示例:

  • 输入: 1->2->3->4->5->NULL
  • 输出: 5->4->3->2->1->NULL

结构体定义

class ListNode {
    
    
    int val;
    ListNode next=null;

    public ListNode(int val) {
    
    
        this.val = val;
    }
}
//12345

结构图解:

在这里插入图片描述


解法:双指针迭代

  • 我们可以申请两个指针。
  • 第一个指针叫 pre,最初是指向 null 的。
  • 第二个指针 cur 指向 head,然后不断遍历 cur。
  • 还要创建一个临时变量temp,记录当前节点的下一个节点
  • 每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
  • 都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。

过程图解:

  1. 创建一个 pre指针,最初是指向 null 的。

在这里插入图片描述

  1. 创建第二个指针 cur 指向 head。

在这里插入图片描述

  1. 还要创建一个临时变量temp,记录当前节点的下一个节点。
    在这里插入图片描述

  2. 不断遍历 cur,每次迭代到 cur,都将 cur 的 next 指向 temp。

    扫描二维码关注公众号,回复: 11656053 查看本文章

    temp = cur.next;

在这里插入图片描述

  1. 然后将当前节点指向pre。

    cur.next = pre;

在这里插入图片描述

在这里插入图片描述

  1. pre和cur节点都前进一位。

    pre = cur;

    ``cur = temp;`

在这里插入图片描述

在这里插入图片描述

  1. 依次遍历图:

在这里插入图片描述

在这里插入图片描述

  1. 在这里插入图片描述

在这里插入图片描述

  1. 在这里插入图片描述

在这里插入图片描述

代码实现

class Solution {
    
    
	public ListNode reverseList(ListNode head) {
    
    
		//申请节点,pre和 cur,pre指向null
		ListNode pre = null;
		ListNode cur = head;
		ListNode temp = null;
		while(cur!=null) {
    
    
			//记录当前节点的下一个节点
			temp = cur.next;
			//然后将当前节点指向pre
			cur.next = pre;
			//pre和cur节点都前进一位
			pre = cur;
			cur = temp;
		}
		return pre;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37924905/article/details/108540573