1.合并有序链表
private static SingleLinkedList mergeLinkedList(SingleLinkedList list1,SingleLinkedList list2){
HeroNode head1 = list1.getHead();
HeroNode head2 = list2.getHead();
if(head1.next == null && head2.next == null){
System.out.println("两个链表都为空...");
return null;
}
if(head1.next == null){
return list2;
}
if(head2.next == null){
return list1;
}
HeroNode temp1 = head1.next;//直接指向第一个节点
HeroNode temp2 = head2.next;
SingleLinkedList mergeList = new SingleLinkedList();
HeroNode head = mergeList.getHead();
HeroNode temp = head.next;
while(temp1 != null && temp2 != null){
if(temp1.no <= temp2.no){
//第一个链表的节点比较小,创建一个新链表存储
mergeList.add(temp1);
temp = temp.next;
temp1 = temp1.next;
}else{
mergeList.add(temp2);
temp = temp.next;
temp2 = temp2.next;
}
}
if(temp1 == null){
//把temp2接下来的元素全部接进去
temp.next = temp2;
}else{
temp.next = temp1;
}
return mergeList;
}
2.逆序打印链表
/*
分析:
1.可以使用先反转链表,然后打印,然后在反转回去的方法,但是这种如果链表长就不好了;
2.使用栈来存储链表,然后在从栈中往外取数据就好了;
使用栈的方式来解决问题的思路:
1.先遍历链表,每次去到一个数据,就把他存入栈中,知道末尾
2.当temp.next == null,就代表走到了链表的末尾,这个时候就可以使用pop操作往外面取出数据并且打印
*/
public void reversePrint(){
if(head.next == null){
System.out.println("链表为空...");
return;
}
Stack<HeroNode> stack = new Stack<HeroNode>();
HeroNode temp = head.next;//直接指向第一个元素
while(true){
stack.push(temp);
if(temp.next == null){
break;
}
temp = temp.next;
}
//到这个位置,链表的元素已经全部放到栈中了,接下来就是出栈操作
while(stack.size() > 0){
System.out.println(stack.pop());
}
}