0
点赞
收藏
分享

微信扫一扫

LeetCode刷题笔记:206.反转链表

phpworkerman 2022-03-18 阅读 67

1. 问题描述

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

2. 解题思路

定义两个指针: pre 和 curr ;pre 在前,curr 在后。
每次让 pre 的 next 指向 curr ,实现一次局部反转
局部反转完成之后,pre 和 curr 同时往前移动一个位置
循环上述过程,直至 pre 到达链表尾部

null 	1 ---> 2 ---> 3 ---> 4 ---> 5
/|\    /|\
 |      |
curr   pre


null <--- 1     2 ---> 3 ---> 4 ---> 5
		 /|\   /|\
		  |		|
		curr   pre


null <--- 1 <--- 2     3 ---> 4 ---> 5
			   /|\    /|\
			    |	   |
			  curr    pre


null <--- 1 <--- 2 <--- 3      4 ---> 5
					   /|\    /|\
					    |	   |
					  curr    pre


null <--- 1 <--- 2 <--- 3 <--- 4      5
							  /|\    /|\
							   |	  |
							 curr    pre


null <--- 1 <--- 2 <--- 3 <--- 4 <--- 5     null
								     /|\    /|\
								      |	     |
								    curr    pre

3. 代码实现

import java.util.List;

class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) {
        this.val = val;
    }
    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

class ListOperation {
    public static void show(ListNode head) {
        if (head == null) {
            System.out.println("EMPTY LIST!");
            return;
        }
        ListNode currNode = head;
        while (currNode.next != null) {
            System.out.print(currNode.val);
            System.out.print("->");
            currNode = currNode.next;
        }
        System.out.print(currNode.val);
        System.out.println();
    }
}

public class Solution206 {
    public ListNode reverseList(ListNode head) {
        ListNode curr = null;
        ListNode pre = head;
        while (pre != null) {
            ListNode tempNode = pre.next;
            pre.next = curr;
            curr = pre;
            pre = tempNode;

        }
        return curr;
    }

    public static void main(String[] args) {
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        ListNode node5 = new ListNode(5);
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;

        Solution206 solution206 = new Solution206();
        ListOperation.show(solution206.reverseList(node1));
    }
}
5->4->3->2->1
举报

相关推荐

0 条评论