节点类
public class heroNode {
int node;
String name;
String nikename;
heroNode next;
}
添加两个辅助节点
首先对于两个链表使用temp1和temp2来辅助遍历,head则是返回的目标链表的头节点
public static heroNode sort(heroNode head1,heroNode head2){
heroNode head = new heroNode(0," ","");
heroNode temp = head;
heroNode temp1 = head1.next;
heroNode temp2 = head2.next;
}
错误思路
我们首先想到的给目标链表添加节点的主要判断条件应该是两个链表中的辅助节点不全为空,这是大的判断条件。
while(!((temp1 == null) && (temp2 == null)))
之后应该是判断什么条件下添加L1链表中的节点,正常思维下我们应该是L1链表中的node(排序用到的数值)比较小或者是L2已经为空了。如下所示:
if((temp1.node < temp2.node) || temp2 == null){
temp.next = temp2;
temp = temp.next;
temp2 = temp2.next;
continue;
}
这是我们正常的思路,另外的else就是把L2的节点添加到目标链表。
但是我们发现编译器报错:java.lang.NullPointerException,这代表空指针异常的意思。
出错的原因是在使用辅助节点的node值判断之前,我们不能保证它是否为空,大的判断条件只能保证二者不全为空,所以我们的判断要更精确一些:
if((temp1 != null) && (temp2 != null)){
if(temp1.node > temp2.node){
temp.next = temp2;
temp = temp.next;
temp2 = temp2.next;
continue;
}
else{
temp.next = temp1;
temp = temp.next;
temp1 = temp1.next;
continue;
}
}
else if(temp1 == null){
temp.next = temp2;
temp = temp.next;
temp2 = temp2.next;
continue;
}
else{
temp.next = temp1;
temp = temp.next;
temp1 = temp1.next;
}
这样就不报错了,先判断两者全不为空的情况,有点麻烦,但是避免了指针为空的错误,有更好的思路欢迎指出
|