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     }

 

 

posted @ 2021-07-09 20:58  瑜琦  阅读(195)  评论(0)    收藏  举报