408算法练习——删除两链表中相同的结点(2017华科834)
删除链表中相同结点
一、问题描述
假设带头节点的单链表A,B为有序递增链表。要求编写算法从有序表A中删除所有和有序链表B中元素相同的结点
例如:A={1,2,3,4,5,6,7,8,9};B={1,2,3,4}
返回结果A={5,6,7,8,9}
二、问题分析
两个链表已经有序,那么可以定义两个指针,当指针元素相同时就删除元素,指针不同时让value值小的指针后移,继续比较。
三、算法设计
定义两个指针指向A和B,如果i的值小于j的值,就让i向后移动,如果i的值大于j的值就让j向后移动,如果i的值等于j的值,就删除i所指结点,然后向后移动i。
这段代码是伪代码
1 public void voidDelete(ListNode A,ListNode B) { 2 ListNode bi = A; 3 ListNode i = A.next;//定义两个指针 4 ListNode j = B.next; 5 while(i != null && j != null) { 6 if(i.data == j.data) { 7 i.next = bi.next; 8 //free(i); 9 i = bi.next; 10 }else if(i.data<j.data) { 11 bi = i; 12 i = i.next; 13 }else if(j.data<i.data) { 14 j = j.next; 15 } 16 } 17 }


浙公网安备 33010602011771号