构建有头节点的链表并实现增删改查和翻转操作。

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建有头节点的链表并实现增删改查和翻转操作。相关的知识,希望对你有一定的参考价值。


import java.util.*;

public class Main 
	static Node headNode=new Node(),temp;
	
	public static Node InitialList() //尾插
		temp=headNode;
		int n=4,m=1;//n为元素个数
		while(n>0) 
			Node node=new Node(n+1);
			temp.next=node;
			temp=temp.next;
			n--;
			m++;
		
		headNode.data=m-1;//链表长度不包括头节点
		return headNode;
	
	public static void reverseList() //头插法
		System.out.println("反转:");
		temp=headNode.next;
		int[] arr=new int[headNode.data];
		for(int i=0;i<headNode.data;i++) 
			arr[i]=temp.data;
			temp=temp.next;
		
		int flag=0;
		temp=headNode;
		temp.next=null;
		while(flag<headNode.data) 
			Node node=new Node(arr[flag]);
			node.next=temp.next;
			temp.next=node;
			flag++;
		
		playdata(headNode);
	
	public static void playdata(Node node) 
		temp=node.next;
		System.out.println("长度为"+headNode.data);
		while(temp!=null) 
			System.out.print(temp.data+" ");
			temp=temp.next;
		
		System.out.println();
	
	public static boolean ListInsert(int i,int j) //i表示要插入的位置,j为要插入的元素
		System.out.println("插入:");
		if(i>headNode.data||i<=0)return false;
		temp=headNode.next;
		int flag=1;
		while(flag<i-1) 
			temp=temp.next;
			flag++;
		
		Node node=new Node(j);
		node.next=temp.next;
		temp.next=node;
		headNode.data++;
		return true;
	
	public static boolean deleteNode(int i) 
		System.out.println("删除:");
		Node node=searchNode(i);
		if(node.next!=null&&node!=null) 
			node.data=node.next.data;
			node.next=node.next.next;
			headNode.data--;
			System.out.print("删除后链表为:");
			playdata(headNode);
		else if(node!=null&&node.next==null) 
			int n=2;
			temp=headNode.next;
			while(n<headNode.data) 
				temp=temp.next;
				n++;
			
			temp.next=null;
			headNode.data--;
			System.out.print("删除后链表为:");
			playdata(headNode);
		else 
			return false;
		
		return true;
	
	public static Node searchNode(int i) 
		System.out.println("查询:");
		System.out.println("目前链表长度为"+headNode.data);
		temp=headNode.next;
		int flag=1;
		boolean ans=false;
		while(temp.data!=i&&temp.next!=null) 
			temp=temp.next;
			if(temp.data==i)ans=true;
			flag++;
		
		if(ans)
		System.out.println("元素"+i+"在该链表的第"+flag+"位");
		else
			System.out.println("该链表不存在"+i+"元素");
		return temp;
	
	
	public static void main(String[] args) 
		InitialList();
		System.out.print("插入前:");
		playdata(headNode);
		System.out.print("插入后:");
		if(ListInsert(3,9))playdata(headNode);
		else 
			System.out.println("插入位置不合法!");
		
		searchNode(2);//查找
		deleteNode(2);//删除
		reverseList();//反转链表
	


class Node
	public int data;
	public Node next;
	public Node() 
		
	
	public Node(int data) 
		this.data=data;
	

以上是关于构建有头节点的链表并实现增删改查和翻转操作。的主要内容,如果未能解决你的问题,请参考以下文章

java实现单向链表

我可以在其析构函数中遍历带有头节点的链表吗?

数据结构和算法--3链表(单向链表双向链表环形单向链表和约瑟夫问题)

Javascript模仿C语言的链表实现(增删改查),并且使用控制台输入输出

链表 (Linked List)

双向链表增删改查分析和实现_韩顺平听课笔记