题意:反转一个单链表。
示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
思路1:双指针法
主要就是将原来正序的箭头掉转一个方向,可以用pre来指向最末为的null值,cur指向head节点,需要注意的是,在断开箭头之前,需要写个temp临时节点用来存储cur.next , 然后指针后移。当cur指向null时,循环结束
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode temp = null; //临时指针用于保存cur的next节点
while(cur != null){
temp = cur.next;
pre= cur.next;
pre = cur;
cur = temp;
}
return pre;
}
}
思路2:递归法
可以模仿双指针的思路写递归
//递归
class Solution {
public ListNode reverseList(ListNode head) {
return reverse(head,null);
}
public ListNode reverse(ListNode cur,ListNode pre){
if(cur == null) return pre;
ListNode temp = null;
temp = cur.next;
cur.next = pre;
return reverse(temp,cur);
}
}