跳过正文
  1. Args/

反转链表

1 分钟·
x
作者
x
熟练掌握Spring Boot、Spring Cloud等Java技术栈,专注于分布式系统设计与微服务架构。热爱技术分享,探索编程之美。
目录

反转链表
#

这是我写的算法可以用来参考,上边有测试用例可以用来检测代码写的对不对。

这个题目是leetcode上的206题,需要反转链表的顺序

效果图
以下是java版本的实现

/**
 * Definition for singly-linked list.
 * public 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 Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode nextTemp = curr.next; // 保存下一个节点
            curr.next = prev;              // 反转当前节点的指针
            prev = curr;                   // 移动prev指针
            curr = nextTemp;                // 移动curr指针
    }
        return prev; // 新的头节点,即原链表的尾节点,由于当前curr为null,所以prev就是新的头节点
    }
}

反转链表的思想就是把每一个节点的下一个节点指向前一个节点,这样遍历到最后的时候得到的就是我们所需要的链表了。

复杂度分析
#

这个算法的时间复杂度是O(n),空间复杂度是O(1)

通过邮件回复

相关文章