package com.node;
public class TestNode1 {
class Node{
int data;
Node next;
public Node(int data,Node next){
this.data = data;
this.next = next;
}
}
public Node head;
// 新增节点
public void add(int data){
if(head==null){
head = new Node(data,null);
}else{
Node node = head;
while(node!=null){
if(node.next==null){
node.next = new Node(data,null);
break;
}
node = node.next;
}
}
}
//打印节点
public void printnode(Node node){
StringBuilder sb = new StringBuilder();
while(node!=null){
sb.append(Integer.toString(node.data));
node = node.next;
}
System.out.println(sb.toString());
}
//删除任意节点
public void deletenode(int data){
Node node = head;
if(head.data==data){
head =head.next;
}else{
while(node!=null){
if(node.next.data==data){
node.next = node.next.next;
return;
}
node = node.next;
}
}
}
//反转节点
public Node reversenode(){
Node node = head;
Node pre = null;
while(node!=null){
//记录下一节点
Node next = node.next;
//设置当前节点的下一个节点为之前记录的前一节点
node.next = pre;
//记录当前节点
pre = node;
//获取下一节点
node = next;
}
return pre;
}
//查找单链表的中间节点--运用2个链表,第一个链表查一个,第二个链表查2个
public Node findmiddlenode(){
Node first = head;
Node second = head;
while(second!=null&&second.next!=null){
first = first.next;
second = second.next.next;
}
return first;
}
//合并两个有序链表
public Node merver2sort(Node a,Node b){
Node merge;
Node current;
if(a.data<b.data){
merge = a;
current = a;
a = a.next;
}else{
merge = b;
current = b ;
b = b.next;
}
while(a!=null&&b!=null){
if(a.data<b.data){
merge.next = a;
a = a.next;
}else{
merge.next = b;
b = b.next;
}
merge = merge.next;
}
if(a!=null){
merge.next = a;
}
if(b!=null){
merge.next = b;
}
return current;
}
//从尾到头打印列表--递归
public void printlnlast(Node node){
if(node!=null){
if(node.next!=null){
printlnlast(node.next);
}
System.out.println(Integer.toString(node.data));
}
}
public static void main(String[] args) {
TestNode1 tn1 = new TestNode1();
tn1.add(1);
tn1.add(2);
tn1.add(3);
tn1.add(4);
tn1.add(5);
tn1.printnode(tn1.head);
//删除节点
//tn1.deletenode(3);
//tn1.printnode(tn1.head);
//反转节点
//tn1.printnode(tn1.reversenode());
//寻找中间节点
tn1.printnode(tn1.findmiddlenode());
tn1.printlnlast(tn1.head);
//Node node1 = tn1.new Node(0, tn1.new Node(1,tn1.new Node(2,tn1.new Node(3,null))));
//Node node2 = tn1.new Node(2, tn1.new Node(3,tn1.new Node(4,null)));
//tn1.printnode(tn1.merver2sort(node1, node2));
}
}
JAVA单链表基本操作
最新推荐文章于 2024-04-25 19:12:42 发布