跳到主要内容

206.反转链表

链接:206.反转链表
难度:Easy
标签:递归、链表
简介:反转一个单链表。

题解 1 - java

  • 编辑时间:2020-02-13
  • 内存消耗:37.3MB
  • 编程语言:java
  • 解法介绍:创建链表,循环头部插入。
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode newHead=null;
while(head!=null) {
ListNode tmp=head.next;
head.next=newHead;
newHead=head;
head=tmp;
}
return newHead;
}
}

题解 2 - typescript

  • 编辑时间:2021-03-06
  • 执行用时:100ms
  • 内存消耗:40MB
  • 编程语言:typescript
  • 解法介绍:递归。
function reverseList(head: ListNode | null): ListNode | null {
if (head === null || head.next === null) return head;
const nextList = reverseList(head.next);
head.next.next = head;
head.next = null;
return nextList;
}

题解 3 - c

  • 编辑时间:2021-11-19
  • 执行用时:4ms
  • 内存消耗:6.6MB
  • 编程语言:c
  • 解法介绍:递归。
struct ListNode* reverseList(struct ListNode* head){
if (head == NULL || head->next == NULL) return head;
struct ListNode *next = head->next;
struct ListNode *reverse_head = reverseList(next);
next->next = head;
head->next = NULL;
return reverse_head;
}

题解 4 - cpp

  • 编辑时间:2022-03-03
  • 执行用时:8ms
  • 内存消耗:8.1MB
  • 编程语言:cpp
  • 解法介绍:双指针。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (!head) return head;
ListNode *newHead = nullptr, *tmp;
while (head) {
tmp = head->next;
head->next = newHead;
newHead = head;
head = tmp;
}
return newHead;
}
};