单链表总结(JAVA)

本文总结了常见的单链表操作,包括插入、删除、遍历等,并通过JAVA实现,所有操作已在本地验证。此外,还介绍了如何删除回环链表中的节点,为以后的链表问题提供参考。
摘要由CSDN通过智能技术生成

总结了一下网上的常用单链表操作(JAVA),然后每个操作都在自己本地跑过一遍,然后会自己写几个自己想到的链表操作,例如删除回环链表中的节点,以后就直接看自己整理的链表操作就可以拉

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class LinkedList {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//创建一个链表
		int[] nodes = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
		int[] nodes2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
		Node head = null;
		Node temp = null;
		for(int i : nodes){
			if(i == 1){
				head = new Node(1);
				temp = head;
			}else{
				temp.next = new Node(i);
				temp = temp.next;
				//if(i == 11) temp.next = head;//回环
			}
		}
		Node head2 = null;
		Node temp2 = null;
		for(int i : nodes2){
			if(i == 1){
				head2 = new Node(1);
				temp2 = head2;
			}else{
				temp2.next = new Node(i);
				temp2 = temp2.next;
			}
		}
		
		//创建回环链表
		Node cycel = null;
		Node cur = null;
		Node cycelStart = null;
		for(int i : nodes2){
			if(i == 1){
				cycel = new Node(1);
				cur = cycel;
			}else{
				cur.next = new Node(i);
				cur = cur.next;
				if(i == 4){
					//创建回环点
					cycelStart = cur;
				}
				if(i == 11){
					cur.next = cycelStart;
				}
			}
		}
		//打印链表
		//printList(head);
//		System.out.println(getListLength(head));//链表的个数
//		printList(reverseList(head));//翻转链表
		//获取倒数第n个节点
		//System.out.println(getReKthNodeUniversal(head, 9).data);
//		System.out.println(getReKthNode(head, 2).data);
		//获取链表的中间节点
//		List<Node> middleNodes = getMiddleNode(head);
//		for(Node node : middleNodes){
//			System.out.println(node.data);
//		}
		//反序输出链表
//		reversePrintListRec(head);//递归
//		reversePrintList(head);//非递归
		//合并2个有序的链表
//		Node mHead = mergeSortListRec(head, head2);//递归
//		Node mHead = mergeSortList(head, head2);
//		printList(mHead);
//		System.out.println(isCycle(head));//证明是否回环,快慢指针
//		System.out.println(getFirstNodeInCycel(cycel).data);//获取环入口节点,快慢指针
//		System.out.println(getFirstNodeInCycelList(cycel).data);//集合求环入口节点
//		System.out.println(isIntersect(head, head2));
//		Node intersect = getCommonFirstNode(head, head2);
//		System.out.println(intersect == null ? "没有相交的节点" : intersect.data);
		//删除链表的节点 时间复杂度O(1) 无环链表
//		int count = 1;
//		Node del = head;
//		while(count != 10){
//			del = del.next;
//			count++;
//		}
//		//删除第10个节点
//		delete(head, del);
//		printList(head);
//		//删除最后一个节点
//		delete(head, del);
//		System.out.println("");
//		printList(head);
		
		//删除有环的链表
		//打印删除前的回环链表
		printList(cycel);
		//删除回环点
		//deleteInCycle(cycel, cycelStart);
		//删除回环点的前驱节点
		Node delOut = cycel;
		//回环外的前驱节点
		while(delOut.next != cycelStart){
			delOut = delOut.next;
		}
		//回环内的前驱节点
		Node delIn = delOut;
		delIn = delIn.next;
		while(delIn.next != cycelStart){
			delIn = delIn.next;
		}
		//deleteInCycle(cycel, delOut);//删除回环外的前驱节点
		deleteInCycle(cycel, delIn);//删除回环内的前驱节点
		System.out.println("");
		System.out.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值