方法一:迭代法
public ListNode ReverseList(ListNode head) {
if(head==null)
return head;
// 双指针
ListNode curNode=head;// 指向当前结点
ListNode preNode=null;// 指向前一个结点
while(curNode!=null)
{
ListNode tempNode=curNode.next;// 声明局部变量存储一下当前结点对后一个结点的引用
curNode.next=preNode;
preNode=curNode;// 先更新pre前指针
curNode=tempNode;// 后更新cur当前指针
}
head=preNode;// 更新头结点
return head;
}
方法二:递归
public class Solution {
public ListNode ReverseList(ListNode head) {
head=reverse(null,head);
return head;
}
public ListNode reverse(ListNode pre,ListNode cur)
{
if(cur==null)
return pre;
ListNode temp=cur.next;
cur.next=pre;
// 双指针法 接下来指针移动 再次进入while循环
// pre=cur;
// cur=temp;
return reverse(pre:cur,cur:temp);// 方法里的参数这样给定值很清晰
}
}