定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
题解1:
解题过程:
初始化prev为null;
prev为前一个结点;curr表示当前结点;next表示缓存当前结点的下一个结点(为了找到下一个结点)
第一步:将next指向curr.next;第二步:将curr.next指向前一个结点
第三步:更新curr和prive
代码如下:
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prve,next;
ListNode curr;
curr=head;
prve=null;
while(curr!=null){
next=curr.next;
curr.next=prve;
prve=curr;
curr=next;
}
return prve;
}
}
题解2:运用递归
思想:递归到最后,从后往前依次逆序
class Solution {
public ListNode reverseList(ListNode head) {
return fun(head);
}
public static ListNode fun(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode ans=fun(head.next);
head.next.next=head;
head.next=null;
return ans;
}
}