剑指 Offer 24. 反转链表
Posted ghlz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 24. 反转链表相关的知识,希望对你有一定的参考价值。
题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
**示例
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
方式一:
迭代法(头插法):
画图分析:设置一个前节点为null,再用临时变量保存当前节点的下一个节点,然后将当前节点的下一节点指向设置的前一节点,最后将前一节点后移,当前节点后移。
代码一:
public static ListNode reverseList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode prev=null;//当前节点的前一节点
ListNode curr=head;//当前节点
while(curr!=null){
ListNode temp=curr.next;//临时变量存当前节点的下一个节点
curr.next=prev;//当前指针指向它前面的节点
prev=curr;//指针后移
curr=temp;//指针后移,处理下一个节点
}
return prev;
}
方式二:
递归法:
先反转后面的链表,从最后两个节点开始反转,依次向前,将后一个节点指向前一个节点,再讲前一个节点指针域置为空,表示将原链表中前一个节点指向后一个节点的指向关系断开。
代码二:
public ListNode reverseList(ListNode head) {
//递归结束
if(head==null||head.next==null){
return head;
}
ListNode newNode=reverseList(head.next);
head.next.next=head;
head.next=null;//防止链表循环
return newNode;
}
以上是关于剑指 Offer 24. 反转链表的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 24. 反转链表 c++/java详细题解