问题
昨天面试遇到的算法题,反转单链表,对应leetCode链接。我记得之前做过这个算法题,但是时间太长忘记了。今天重新整理了下思路。
思路
- 我们定义一个pre变量作为链表当前节点的上一个节点,默认等于null,cur变量代表当前节点,默认等于链表头结点
- 遍历链表,遍历条件为cur节点不等于null
- 进入遍历,保存cur节点的next节点到临时变量tmp中
- 将cur节点的next指针指向pre
- 节点向前移动,cur节点赋值给pre,tmp节点赋值给cur
- cur节点为空跳出循环,将pre作为返回结果返回
代码
空间复杂度为O(1),时间复杂度为O(n),代码见下:
public static ListNode reverseList(ListNode head) {
ListNode pre = null,cur = head;
while (cur!=null){
ListNode tmp = cur.next;
cur.next = pre;
pre =cur;
cur = tmp;
}
return pre;
}