单链表四种实现方式之一:使用头插法实现链表的反转

本文介绍了如何利用头插法实现链表的反转,通过创建新链表并逐步将原链表节点以头部插入的方式加入新链表,从而达到翻转效果。详细步骤包括创建空新链表,然后依次摘除原链表头部节点并插入新链表。

利用头插法实现链表的反转

方法简介:
一:创建一个新的空链表,如下图所示:
在这里插入图片描述
二:从原链表中摘除头部节点 1,并以头部插入的方式将该节点添加到新链表中
在这里插入图片描述
三:从原链表中摘除头部节点 2,以头部插入的方式将该节点添加到新链表中
在这里插入图片描述
四:继续重复以上工作,先后将节点 3、4 从原链表中摘除,并以头部插入的方式添加到新链表中
在这里插入图片描述
经过以上四个步骤,该链表已经反转完成

代码实现:

package com.linkedlist;

import java.util.Arrays;


/*链表节点类*/
class Linked{
	int data;
	Linked next;
	
	public Linked(int data) {
		this.data = data;
	}

	@Override
	public String toString() {
		return "Linked [data=" + data + ", next=" + next + "]";
	}
	
}


//链表类
public class Linkedlist {  
	
	public static void main(String[] args) {
		
		/*构造一个简单的链表*/
		Linked head=new Linked(0);
		
		Linked a=new Linked(1);
		
		Linked b=new Linked(2);
		
		Linked c=new Linked(3);
		
		Linked d=new Linked(4);
		
		
		head.next=a;
		a.next=b;
		b.next=c;
		c.next=d;
		
		//使用方法实现链表的反转
		head=ReverseLinkedlist(head);
		
		//输出链表
		System.out.println(head);
		
	}
	
	public static Linked ReverseLinkedlist(Linked head) {
		//创建三个辅助节点进行链表的反转
		Linked temp=null;     //用于储存新加入的节点
		
		Linked newhead=null;  //新的链表的头节点
		
		Linked cur=head;      //用cur代替头节点
		
		int length=0;
		
		//得到这个链表的个数
		while(head!=null) {
			length++;
			head=head.next;
		}
		
		//使用头插法进行链表反转
		for(int i=1;i<=length;i++) {  //一个length长度的链表需要反转length次
			temp=cur;
			
			cur=cur.next;
			
			temp.next=newhead;
			
			newhead=temp;
		}
		
			return newhead;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值