剑指Offer 反转链表
题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解法一:迭代法
1、首先,我们就是要把指针反向指,让结果反向输出。那么第一个就是要让1这个节点指向null,2指向1
2、2指向1之后,要记住后面一个3,不然后面找不到了。
3、定义一个prev,让其指向null
4、定义一个next,让其留住后面的节点地址,防止找不到。
5、定义一个当前变量curr,让其指向前一个节点,比如2指向1。
代码:
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null,next;
ListNode cur=head;
while(cur!=null){
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
}
解法二:递归法
递归的思想就是反复调用一个重复的过程,从而完成整个代码。
我们先是可以理解1的下一个节点是2,2的下一个节点是3,我们要反向输出节点就是要2指向1,1指向null,那么就是1的下一个节点的下一个节点(2)指向1,1的下一个节点指向null。即head.next.next=head; head.next=null;
然后就是两个结点之间不断进行这样的指向,从而完成反向输出。
代码:
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode node=reverseList(head.next);
head.next.next=head;
head.next=null;
return node;
}
}

版权声明:本文为weixin_45667289原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。