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;
        }
    }
  • 相关阅读:
    C# 小算法1
    函数 y=x^x的分析
    随机数
    对拍
    Cube Stack
    Permutation
    一笔画问题
    康托展开&&康托逆展开
    待完成
    小错误 17/8/10
  • 原文地址:https://www.cnblogs.com/patatoforsyj/p/9468956.html
Copyright © 2011-2022 走看看