剑指offer 反转链表
题目描述
解题思路
首先使用循环来解决
本次循环的node是cur
每次循环的时候把自身的next指向之前一个node,然后把cur赋值为下一个node,再次进行这个过程
这里面有三个问题
第一个是之前的node怎么表示,我们用prev来存储,它有一个初始值,每次循环的时候进行对他的值进行更新为cur
第二是我们已经把cur.next赋值为prev了,怎么把找到cur的下一个node,这里我们在cur.next还没有赋值的时候就把cur.next存在next里面,然后在cur.next赋值之后把cur赋值为next
第三是结束条件,我们的结束条件是cur为空的时候结束,看极限的时候,最后一个时代时候,prev成立,next是null没问题。开始的时候我们应该考虑空链表,返回null。一个时代时候也成立。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode prev,next,cur;
prev=null;
if(head==null)
return null;
cur=head;
while(cur!=null){
next=cur.next;
cur.next=prev;
prev=cur;
cur=next;
}
return prev;
}
}