数据结构之链表及相关算法

本文深入探讨链表数据结构,包括链表的定义、创建方法,并详细解析找出倒数第k个元素、链表反转、寻找中间结点、有序链表合并、判断链表相交、找到相交节点以及检测链表环等七大算法。
摘要由CSDN通过智能技术生成

链表的定义

链表是链式存储结构,可以用任意一组存储单元来存储单链表中的数据元素,存储单元可以是不连续的。除了存储每个数据元素的值之外,还必须存储知识其直接后继元素的信息。定义如下的数据类存储结点信息。

//链表结点的定义
class Node{
   
	Node next = null; // 结点域
	int data; // 数据域
	public Node(int data){
   
		this.data = data;
	}
}

链表的创建

给定一个数组,用链表来存储这个数组。循环遍历数组,把每个元素链接到链表中,最后返回头结点。

public class TestNode{
   
	
	// 输入一个整型数组,创建成链表
	public Node createLinkList(int[] arr){
   
		Node head = new Node(arr[0]); //链表头
		Node r = head; // 指向链表尾结点
		for(int i=1; i<arr.length; i++){
   
			Node pNode = new Node(arr[i]); // 新结点的产生
		    r.next = pNode; // 链表尾部增加新结点
		    r = pNode; // r更新为新加的结点
		}
		return head;
	}
	
	// 返回链表的长度
	public int length(Node head) {
   
		int length = 0;
		Node tmp = head;
		while(tmp != null){
   
			length++;
			tmp = tmp.next;
		}
		return length;
	}
	
	// 顺序打印链表元素信息
	public void printLinkList(Node head){
   
		Node p = head;
		while(p != null){
   
			System.out.print(p.data+"->");
			p = p.next;
		}
		System.out.println()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值