反转链表
问题描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
三种方法
1.迭代(双指针在原链表反转)
2.递归(子问题)
3.使用一个数组存储链表再遍历
方法1:迭代
双指针
class Solution {
public ListNode reverseList(ListNode head) {//迭代,双指针
ListNode cur=head,pre=null;
while(cur!=null){
ListNode next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
}
方法2:递归(子问题)
递归步骤:划分子问题,合并子问题,递归出口
public ListNode reverseList(ListNode head) {//递归
if(head==null || head.next==null) return null;
ListNode ans = reverseList(head.next);//ans是反转后子链表的头指针
//合并子问题
head.next.next=head;
head.next=null;
return ans;
}
方法3:使用一个数组存储链表再遍历
。。。

浙公网安备 33010602011771号