输入一个链表,反转链表后,输出新链表的表头

算法记录

题目:

输入一个链表,反转链表后,输出新链表的表头



说明

一、题目

输入一个链表,反转链表后,输出新链表的表头。。

二、分析

  • 链表是一个个节点链接在一起的串行结构(这里讨论单向的链表),除头结点外每个节点皆有一个子节点相连,子节点可以是null状态的,当然遇见null节点之后链表也就结束了。
  • 链表的插入可以是两种:一是尾插法,插入的数据都放到最后一个节点位置,先插入的节点遍历输出时位置就靠前。二是头插法,插入的数据都放在头部,后插入的节点遍历时输出位置就靠前。
  • 对一个链表进行顺序读取取出节点,再将节点采用头插法插入一个新的链表中,直到链表节点被遍历读取完,这样就完成链表的反转。
  • 创建两个新链表用于保存反转链表*(pre)和接收原链表的移动(pnext),将pnext指向原链表(head)*的下一个节点位置,也就接收了除head指向的头结点外的所有节点数据,将head链接到pre的前一个节点完成头插,再将所有的节点进行一步更新,head指向next也就是下一个节点,pre节点位置上移为头结点,循环直到head指向节点为空(这个时候的next也指向null,也就不会发生空指向调用的情况),就完成单向链表的反转。
  • 当然在最先接收链表的传入时应先判断是否为null或是只有一个节点,是则直接返回,不在进行下面的反转操作。
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head==null || head.next==null){
            return head;
        }
        else{
            ListNode hnext;
            ListNode pre = null;
            while(head!=null){
                hnext = head.next;
                head.next = pre;
                pre = head;
                head = hnext;
            }
            return pre;
        }
        
    }
}

总结

熟悉链表的表现和操作

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值