总结了一下网上的常用单链表操作(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.