java實現---1.求兩個已排序單鏈表中相同的數據 2. 求兩個已排序單鏈表中重複出現的相同的數據

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;
                }
            }

        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章