单链表逆置的实现

单链表逆置,就是将节点a1,a2…an转变成an,an-1…a1,并且要求使用原来链表的空间,空间复杂度要求为O(1)。

逆置单链表至少需要两个辅助节点p,q,并且利用头结点head。p用来遍历单链表,q用来记录当前节点,head记录前一节点。通过这三个节点,就能实现单链表的逆置。

p与q在每次循环前应指向同一节点,head指向p,q的前一节点。

代码如下:

public Node verse (Node head){
    Node p = null;
    Node q = null;
//将p,q设为同一节点
    p = head.getnext();
    if(p==null)
    {
        return head;
    }
    q = p;
//将head初始化为空
    head = null;
    while(p!=null)
    {
//通过p节点遍历链表
        p = p.getnext();
//q节点把当前节点的后置节点设为自己前一个节点
        q.setnext(head);
//head后移一个节点
        head = q;
//q后移一个节点
        q = p;
    }
    Node newhead = new Node();
    newhead.setnext(head);
//返回一个新的head值,如果单链表为一个节点,返回原head,如果为2个或2个以上的节点,返回逆置以后的头结点。
    return newhead;
}

单链表逆置的关键点在于

p用来遍历单链表,q用来记录当前节点,head记录前一节点。

p用来遍历单链表,q用来记录当前节点,head记录前一节点。

p用来遍历单链表,q用来记录当前节点,head记录前一节点。

p与q在每次循环前应指向同一节点,head指向p,q的前一节点。

p与q在每次循环前应指向同一节点,head指向p,q的前一节点。

p与q在每次循环前应指向同一节点,head指向p,q的前一节点。

重要的事情说三遍!~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值