public class Test {
public static void main(String[] args) {
ListNode head1=new ListNode(1);
ListNode head2=new ListNode(2);
ListNode head3=new ListNode(3);
ListNode head4=new ListNode(4);
ListNode head5=new ListNode(5);
head1.next=head2;
head2.next=head3;
head3.next=head4;
head4.next=head5;
Solution2 solution=new Solution2();
System.out.println(solution.reverseList(head1).val);
}
static class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
//方法1 双指针
static class Solution1 {
public ListNode reverseList(ListNode head) {
ListNode cur = head, pre = null;
while(cur != null) {
ListNode tmp = cur.next; // 暂存后继节点 cur.next
cur.next = pre; // 修改 next 引用指向
pre = cur; // pre 暂存 cur
cur = tmp; // cur 访问下一节点
}
return pre;
}
}
//递归
static class Solution2 {
public ListNode reverseList(ListNode head) {
return recur(head, null); // 调用递归并返回
}
private ListNode recur(ListNode cur, ListNode pre) {
if (cur == null) return pre; // 终止条件
ListNode res = recur(cur.next, cur); // 递归后继节点
cur.next = pre; // 修改节点引用指向
return res; // 返回反转链表的头节点
}
}
}
Leecode-剑指offer-java代码本地测试笔记(剑指 Offer 24. 反转链表)
最新推荐文章于 2022-12-06 11:26:20 发布