链表合并笔记
完整代码如下
public class LinkedTest {
public static void main(String[] args) {
System.out.println("合并前-------------");
SingleMergeLinked sml_one = new SingleMergeLinked();
LinkNode lOne = new LinkNode(1);
LinkNode lTwo = new LinkNode(3);
LinkNode lThree = new LinkNode(5);
LinkNode lFrou = new LinkNode(7);
sml_one.add(lOne);
sml_one.add(lTwo);
sml_one.add(lThree);
sml_one.add(lFrou);
sml_one.sList();
SingleMergeLinked sml_two = new SingleMergeLinked();
LinkNode nOne = new LinkNode(2);
LinkNode nTwo = new LinkNode(4);
LinkNode nThree = new LinkNode(6);
LinkNode nFrou = new LinkNode(8);
sml_two.add(nOne);
sml_two.add(nTwo);
sml_two.add(nThree);
sml_two.add(nFrou);
sml_two.sList();
System.out.println("合并后-------------");
SingleMergeLinked mergeAfter = new SingleMergeLinked();
mergeAfter.add(mergeAfter.mergeLink(sml_one, sml_two));
mergeAfter.sList();
}
}
class SingleMergeLinked{
private LinkNode head = new LinkNode(0);
public LinkNode getHead() {
return head;
}
public void add(LinkNode linkNode) {
LinkNode node = head;
while(true) {
if(node.next == null) {
break;
}
node = node.next;
}
node.next = linkNode;
}
public LinkNode mergeLink(SingleMergeLinked one,SingleMergeLinked two) {
LinkNode sOne = one.getHead().next;
LinkNode sTwo = two.getHead().next;
if(sOne.next == null) {
return sTwo;
}
if(sTwo.next == null) {
return sOne;
}
LinkNode temp = new LinkNode(0);
LinkNode flag = temp;
while(sOne != null && sTwo != null) {
int oneVal = sOne.value;
int twoVal = sTwo.value;
if(oneVal < twoVal) {
flag.next = new LinkNode(oneVal);
sOne = sOne.next;
}else {
flag.next = new LinkNode(twoVal);
sTwo = sTwo.next;
}
flag = flag.next;
}
if(sOne != null) {
flag.next = sOne;
}
if(sTwo != null) {
flag.next = sTwo;
}
return temp.next;
}
public void sList() {
if(head.next == null) {
System.out.println("链表为空");
return;
}
LinkNode temp = head.next;
while(true) {
if(temp == null){
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}
class LinkNode{
public int value;
public LinkNode next;
public LinkNode() {
}
public LinkNode(int value) {
this.value = value;
}
@Override
public String toString() {
return "LinkNode [value=" + value + "]";
}
部分代码
- 添加节点
public void add(LinkNode linkNode) {
LinkNode node = head;
while(true) {
if(node.next == null) {
break;
}
node = node.next;
}
node.next = linkNode;
}
- 遍历链表节点
public void sList() {
if(head.next == null) {
System.out.println("链表为空");
return;
}
LinkNode temp = head.next;
while(true) {
if(temp == null){
break;
}
System.out.println(temp);
temp = temp.next;
}
}
- 链表合并操作
public LinkNode mergeLink(SingleMergeLinked one,SingleMergeLinked two) {
LinkNode sOne = one.getHead().next;
LinkNode sTwo = two.getHead().next;
if(sOne.next == null) {
return sTwo;
}
if(sTwo.next == null) {
return sOne;
}
LinkNode temp = new LinkNode(0);
LinkNode flag = temp;
while(sOne != null && sTwo != null) {
int oneVal = sOne.value;
int twoVal = sTwo.value;
if(oneVal < twoVal) {
flag.next = new LinkNode(oneVal);
sOne = sOne.next;
}else {
flag.next = new LinkNode(twoVal);
sTwo = sTwo.next;
}
flag = flag.next;
}
if(sOne != null) {
flag.next = sOne;
}
if(sTwo != null) {
flag.next = sTwo;
}
return temp.next;
}
- 主方法主要代码段
SingleMergeLinked mergeAfter = new SingleMergeLinked();
mergeAfter.add(mergeAfter.mergeLink(sml_one, sml_two));
mergeAfter.sList();