题目描述
给定一个单链表的头结点 pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0≤n≤1000
要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
代码及描述
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null)//当链表为空时,返回空
{
return null;
}
ListNode cur = head;//当前节点
ListNode pre = null;//
while(cur != null)
{
ListNode temp = cur.next;//记录下当前节点的下一个节点
cur.next = pre;//让当前节点指向前一个节点
pre = cur;//前一个节点等于当前节点
cur = temp;//当前节点等于下一个节点
}
return pre;
}
}
思路详解
链表反转,先记录下当前节点cur的下一个节点,再让当前节点指向它的前一个节点,接着将前一个节点pre变成当前节点,当前节点变为当前节点的下一个节点,如此循环知道当前节点变为null