反转链表-力扣206

这篇具有很好参考价值的文章主要介绍了反转链表-力扣206。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

反转链表-力扣206

方法一

    public ListNode reverseList1(ListNode o1){
        ListNode n1=null;
        ListNode p=o1;
        while(p!=null){
            n1=new ListNode(p.val,n1);//插入的下一个指向新链表的头部
            p=p.next;
        }
return n1;
    }

方法二

  /*
    方法2     写了两个类库,运用了面向和对象的思想,创建建立和移除两个方法
与方法1类似,构造一个新链表,从旧链表头部移除节点,添加到新链表头部,完成后
新链表即是倒序的,区别在于原题目未提供节点外层的容器类,这里提供一个,另外一
个区别是并不去构造新节点
     */
public ListNode reverseList2(ListNode head){
    List list1=new List(head);
    List list2=new List(null);
    while (true){
        ListNode first=list1.reverseList();
        if(first==null){
            break;
        }
        list2.addFirst(first);
    }
return list2.head;
}
    static class List{
        ListNode head;

        public List(ListNode head){
            this.head=head;
        }
        public void addFirst(ListNode first){//头插法
            first.next=head;
            head=first;//更新变成first
        }
        public ListNode reverseList(){//返回头节点
            ListNode first=head;//找到头节点.第一个节点
            if(first!=null){
                head=first.next;//移走了,原来的就是第一个
            }
            return first;//返回的头节点
        }

    }

方法三

//方法三-递归
    /*
    1,2,3,4,5
     */

    public ListNode reverseList3(ListNode p){
        if(p==null||p.next==null){
            return p;
        }
        ListNode last=reverseList3(p.next);
        p.next.next=p;//  p  p.next  p.next.next->p
        p.next=null; // 4   5     5->4  4->null
        return last; //p指向的问题
    }

方法四

/*
方法四
n1
         o1
4->3->2->1->5->nul1
01d1
new1
*/
  public ListNode reverseList4(ListNode o1){
      ListNode o2=o1.next;
      ListNode n1=o1;
      while (o2!=null){
          o1.next=o2.next;//2   把第二个节点从链表中移出
          o2.next=n1;//3   旧链表的o2指向新链表n1,此时n1和o1同体

          n1=o2;//4    n1指向o2,n1和o2的值都一样,把链表头的位置让给o2
          o2=o1.next;//5  回归原来的位置
      }
      return n1;
  }

方法五

 //方法五
    /*
n1
5->4->3->2->1->nu11
*/
  public ListNode reverseList(ListNode o1){
      ListNode n1=null;     //新链表开始为空
      while (o1!=null){     //o1移动到的位置是最后一个,也就是为空的时候
          ListNode o2=o1.next;  //节点2是o1的下一个节点
          o1.next=n1;  //把o1移动到新链表的头部
          n1=o1;  //  o1就变成了n1
          o1=o2;   //o2的位置就是o1,指针复位
      }
      return n1;
  }

文章来源地址https://www.toymoban.com/news/detail-574408.html

到了这里,关于反转链表-力扣206的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode 206.反转链表

    ✨链接:数据结构-手撕单链表+代码详解。 🌟 leetcode链接:反转链表 1️⃣ 代码: 2️⃣ 代码:

    2024年02月12日
    浏览(38)
  • 链表反转-LeetCode206

    题目: 给你单链表的头结点head,请反转链表,并返回反转后的链表。 示例: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 1、建立虚拟头结点辅助反转 分析链表插入元素的时候,会发现如何处理头结点是个比较麻烦的问题,为此可以先建立一个虚拟的结点ans,并且令a

    2024年02月07日
    浏览(44)
  • LeetCode:206. 反转链表

    力扣链接

    2024年01月15日
    浏览(45)
  • LeetCode 206 - 反转链表

    给定一个单链表的头节点 head ,反转该链表并返回反转后的链表。 我们可以使用迭代或递归的方式来反转链表。 迭代法 初始化三个指针 cur 、 pre 和 next 。 遍历链表,将 cur.next 指向 pre ,然后将 pre 和 cur 向前移动一步。 重复上述步骤,直到 cur 到达链表末尾。 递归法 递归

    2024年01月15日
    浏览(39)
  • 每日一题 206反转链表

    给你单链表的头节点  head  ,请你反转链表,并返回反转后的链表。 示例 1: 示例 2: 示例 3:

    2024年02月13日
    浏览(61)
  • 203.移除链表元素&707.设计链表& 206.反转链表

    203.移除链表元素: 给你一个链表的头节点  head  和一个整数  val  ,请你删除链表中所有满足  Node.val == val  的节点,并返回  新的头节点  。 707.设计链表  : 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。

    2024年02月11日
    浏览(35)
  • 203.移除链表元素|707.设计链表|206.反转链表

    203. 移除链表元素 这里以链表 1 4 2 4 来举例,移除元素4。 如果使用C,C++编程语言的话,不要忘了还要从内存中删除这两个移除的节点, 清理节点内存之后如图: 其实 可以设置一个虚拟头结点 ,这样原链表的所有节点就都可以按照统一的方式进行移除了。 来看看如何设置

    2024年02月11日
    浏览(44)
  • Leetcode-每日一题【206.反转链表】

    给你单链表的头节点  head  ,请你反转链表,并返回反转后的链表。 示例 1: 输入: head = [1,2,3,4,5] 输出: [5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [0, 5000] -5000 = Node.val = 5000   1.我们遍历链表,首先设置

    2024年02月12日
    浏览(37)
  • 206. 反转链表、Leetcode的Python实现

    博客主页:🏆 看看是李XX还是李歘歘  🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗 点关注不迷路,总有一些📖知识点📖是你想要的 💗 ⛽️今天的内容是      Leetcode    206. 反转链表     ⛽️💻💻💻 206. 反转链表 给你单链表的头节点 

    2024年02月06日
    浏览(36)
  • Day 3 链表: 203.移除链表元素, 707.设计链表, 206.反转链表

    链接基础,以及链表和数组的区别: 代码随想录 1. 链表类型: 单列表,双列表,循环列表。 单列表: 双列表: 循环列表: 2. 链表的操作 :删除节点,增加节点。 删除节点: 其中对于 普通的节点 删除,就如上图所示,直接让前一个节点的指向下一个节点即可。 但是对于

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包