链表逆序
程序员文章站
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 -->
上一篇: php的4种常用运行方式详解