欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链表逆序

程序员文章站 2024-03-05 23:35:55
...

链表逆序

0-->1->2-->3-->4-->5

逆序为:head->5–>4–>3–>2–>1–0
我们只需要定义两个节点 一个cur指向当前需要逆向的节点一个next指向后一个需要逆向的节点即可
然后把需要逆向的节点插入到头节点的下一个节点 head.next=cur即可是不是思路很简单而且时间复杂度O(n)不需要额外的开辟内存空间;

代码

下面就看代码实现:

//节点引用类
public class LNode {
    int data;
    LNode next;
}

我们可以先初始化一个链表

       LNode head=new LNode();
        head.next=null;
        LNode temp=null;
        LNode cur=head;
        for (int i = 0; i <8 ; i++) {
            temp=new LNode();
            temp.data=i;
            temp.next=null;
            cur.next=temp;
            cur=temp;
        }

最后我们详细的看看翻转的代码

public static void ReverseLink(LNode head){
		//先判断链表是否为空 一个好的习惯
        if(head==null || head.next==null) return;
        LNode cur=null;
        LNode next=null;
        //把当前节点指向逆序的第一个节点
        cur=head.next.next;
        //把头节点置为null
        head.next.next=null;
        while (cur!=null){
            next=cur.next;
            //断开当前节点和后继节点的引用 即cur为一个节点 之后把头节点的后继指向当前节点即可 直到当前节点不为空
            cur.next=head.next;
            head.next=cur;
            cur=next;
        }
    }

这就是一个简单的链表翻转
more -->