开网站做销售,网站自动售卡怎么做,公司的做网站,WordPress mk主题206.反转链表 这道题有两种解法#xff0c;但不只有两种#xff0c;嘿嘿。
法一#xff1a;迭代法
就是按循序遍历将每一个指针的指向都给改了。比如说1——2——3改为null——1——2——3这样。那这里以第二个结点为例#xff0c;想一想。我想要指向…206.反转链表 这道题有两种解法但不只有两种嘿嘿。
法一迭代法
就是按循序遍历将每一个指针的指向都给改了。比如说1——2——3改为null——1——2——3这样。那这里以第二个结点为例想一想。我想要指向本身的指针改为指向1那我是不是要获取它前一个结点的值那这怎么获取呢所以需要用一个指针来保存前一个结点。同理当我成功的将指向本身的箭头更改之后那我原本元素的下一个咋整还能找到吗所以又需要设立一个指针用以保存后面的原本的值。说的可能很复杂但是代码很简单。
代码
(参考官方的因为我现在还在学习阶段)
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {//1、迭代//pre用于存储当前结点的前一个结点ListNode prenull;ListNode currhead;while(curr!null){//next指针用于存储当前结点的后一个结点ListNode nextcurr.next;curr.nextpre;precurr;currnext;}return pre;}
}
法二递归
这个我比较喜欢。
题解
用递归直到当前结点p的p-nextnull则返回其本身。然后回到上一个结点。 head.next.nexthead; head.nextnull;
这两行代码的作用在于将当前结点的p-nextnull,同时将当前结点的下一个结点的next指向本身将箭头调换指向自己但不是自杀只是为了完成任务而已开个玩笑。
我觉得可能会卡在对递归的理解多多刷题多多思考相信自己就ok了。
代码
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {//2、递归if(headnull||head.nextnull){return head;}ListNode newHeadreverseList(head.next);//反转吧head.next.nexthead;head.nextnull;return newHead;}
}