1.求兩個已排序單鏈表中相同的數據
class ListNode{
int data;
ListNode next;
}
public class Link{
public static void PrintIntersection(ListNode list1,ListNode list2){
ListNode cur1 = list1;
ListNode cur2 = list2;
while((cur1 != null) && (cur2 != null)){
if(cur1.data < cur2.data){
cur1 = cur1.next;
}else if(cur1.data > cur2.data){
cur2 = cur2.next;
}else{
System.out.println(cur1.data);
cur1 = cur1.next;
cur2 = cur2.next;
}
}
}
public static void main(String[] args) {
ListNode n1 = new ListNode();
ListNode n2 = new ListNode();
ListNode n3 = new ListNode();
ListNode n4 = new ListNode();
n1.data = 1;
n2.data = 2;
n3.data = 3;
n4.data = 4;
n1.next = n2;
n2.next = n3;
n3.next = n4;
ListNode n5 = new ListNode();
ListNode n6 = new ListNode();
ListNode n7 = new ListNode();
ListNode n8 = new ListNode();
n5.data = 1;
n6.data = 3;
n7.data = 7;
n8.data = 8;
n5.next = n6;
n6.next = n7;
n7.next = n8;
PrintIntersection(n1,n5);
}
}
2.求兩個已排序單鏈表中重複出現的相同的數據
public static void PrintIntersectionDup(ListNode list1,ListNode list2) {
ListNode cur1 = list1;
ListNode cur2 = list2;
int data;
while ((cur1 != null) && (cur2 != null)) {
if (cur1.data < cur2.data) {
cur1 = cur1.next;
} else if (cur1.data > cur2.data) {
cur2 = cur2.next;
} else {
System.out.println(cur1.data);
data = cur1.data;
while ((cur1 != null)&&(cur1.data == data)){
cur1 = cur1.next;
}
while((cur2 != null)&&(cur2.data == data)){
cur2 = cur2.next;
}
}
}
}