有序链表的合并
主要采用了递归的思想
package com.dataStructure.LinkedList;
public class MyLinkedListTest {
public static void main(String[] args) {
/*
* 合并两个链表:
* 1,3,5,7
* 2,4,6,8
* */
Node start1=new Node(1);
start1.append(new Node(3)).append(new Node(5)).append(new Node(7));
Node start2=new Node(2);
start2.append(new Node(4)).append(new Node(6)).append(new Node(8));
start1.show();
start2.show();
/*
* 合并两个链表
* */
merge(start1,start2).show();
}
public static Node merge(Node start1, Node start2) {
Node node=null;
if (start1==null){
return start2;
}
if (start2==null){
return start1;
}
else {
if (start1.getData()<start2.getData()){
node=start1;
node.next=merge(start1.next,start2);
}
else{
node=start2;
node.next=merge(start1,start2.next);
}
}
return node;
}
}
链表的反转
package com.dataStructure.LinkedList;
public class ReverseNode {
public static void main(String[] args) {
Node node=new Node(1);
node.append(new Node(2)).append(new Node(3)).append(new Node(4));
node.show();
reverse(node).show();
}
public static Node reverse(Node node){
//当前节点
Node currentNode=node;
//前一个节点
Node preNode=null;
//下个节点
Node nextNode=node.next;
//记录临时节点
Node temp=null;
while (nextNode!=null){
currentNode.next=preNode;
temp=nextNode.next;
nextNode.next=currentNode;
preNode=currentNode;
currentNode=nextNode;
nextNode=temp;
}
return currentNode;
}
}