单链表的反转

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(next域),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
实现单链表的反转,即:
在这里插入图片描述
反转后为:
在这里插入图片描述
思路如下:
1.先定义一个节点reverseHead
2.从头到尾遍历原来的链表,每遍历一个节点就将其取出,并放在新链表reverseHead的最前端
3.原来链表的head.next=reverseHead.next
图解如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现:

public  void reversetList(Node head){
      if(head.next==null ||head.next.next==null){
           return ;
      }
    //定义一个指针,帮助我们遍历原来的链表
    Node cur=head.next;
    //指向当前节点【cur】的下一个节点
    Node next =null;
    Node reverseHead = new Node(0,"","");
   //遍历原来的数组,每遍历一个,放在reverseHead的最前端  
    while(cur!=null){
        next=cur.next;//保存当前节点的下一个节点
        cur.next=reverseHead.next;//将cur的下一个节点指向新的链表的最前端
        reverseHead.next=cur; //将cur链接到新的链表上
        cur=next;//cur后移
     }
    //将head.next指向reverseHead.next,实现链表反转
    head.next=reverseHead.next;
}

效果图如下:
在这里插入图片描述
还可以利用栈这个数据结构,将各个节点压入到栈中,然后利用栈先进后出的特点,实现反转打印

代码如下:

public void reversePrint(Node head){
       if(head.next==null){
            return ; //空链表
       }
   //创建一个栈,将各个节点压入栈
   Stack<Node> stack=new Stack<>();
   Node cur=head.next;
   //将链表的所有节点压入栈
   while(cur!=null){
      stack.push(cur);
      cur=cur.next;//cur后移,压入下一个节点
    }
   //将栈中节点打印,出栈
    while(stack.size()>0){
        System.out.println(stack.pop());
    }
}

效果图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值