zoukankan      html  css  js  c++  java
  • leetcode-反转链表

     
    转载至:https://blog.csdn.net/fx677588/article/details/72357389
    反转一个单链表。
     
    示例:
    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL
    进阶:
    你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
    迭代法:
    首先对于链表设置两个指针,然后依次将旧链表上每一项添加在新链表的后面,然后新链表的头指针NewH移向新的链表头,如下图所示。此处需要注意,不可以上来立即将上图中P->next直接指向NewH,这样存放2的地址就会被丢弃,后续链表保存的数据也随之无法访问。而是应该设置一个临时指针tmp,先暂时指向P->next指向的地址空间,保存原链表后续数据。然后再让P->next指向NewH,最后P=tmp就可以取回原链表的数据了,所有循环访问也可以继续展开下去。
    /**
    * Definition for singly-linked list.
    * public class ListNode {
    *     int val;
    *     ListNode next;
    *     ListNode(int x) { val = x; }
    * }
    */
    class Solution {
        public ListNode reverseList(ListNode head) {
          if(head==null||head.next==null)return head;
            ListNode newH=null;
            ListNode p=head;
            while(p!=null){
                ListNode temp=p.next;    //暂存p下一个地址,防止变化指针指向后找不到后续的数
                p.next=newH;             //p->next指向前一个空间
                newH=p;                 //新链表的头移动到p,扩长一步链表
                p=temp;                 //p指向原始链表p指向的下一个空间
            }
            return newH;
        }
    }
  • 相关阅读:
    jmeter中response data出现乱码的解决方法
    jmeter功能摘要
    jmeter的安装目录文件
    C语言中if(a);if(!a);if(a!=0);if(a==0)有什么区别?
    python怎么连接redis(附源码)
    组管理和权限管理
    实用指令
    用户管理
    开机/重启/用户切换/注销
    vim快捷键
  • 原文地址:https://www.cnblogs.com/patatoforsyj/p/9468956.html
Copyright © 2011-2022 走看看