题目
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
要求:空间复杂度 O(1) ,时间复杂度 O(n)。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
示例1
输 入:{1,2,3}
返回值:{3,2,1}
示例2
输入:{}
返回值:{}
说明:空链表则输出空
核心代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
//确定两个指针的初始位置
ListNode pre = null;
ListNode cur = head;
//定义一个临时结点
ListNode temp = null;
while(cur!=null){
// 在这里循环的判断条件如果误写为 while(cur.next!=null)则会少输出反转后的头结点,
//例如示例1会输出{2,1}
temp=cur.next; //保存指针cur的后继节点,防止节点丢失
cur.next=pre; //反转相邻结点
//在循环中将两个指针分别向后移一位
pre=cur;
cur=temp;
}
return pre;
}
}