手机
当前位置:查字典教程网 >编程开发 >Java >编码实现从无序链表中移除重复项(C和JAVA实例)
编码实现从无序链表中移除重复项(C和JAVA实例)
摘要:如果不能使用临时缓存,你怎么编码实现?复制代码代码如下:方法一:不使用额外的存储空间,直接在原始链表上进行操作。首先用一个指针指向链表头节点...

如果不能使用临时缓存,你怎么编码实现?

复制代码 代码如下:

方法一:不使用额外的存储空间,直接在原始链表上进行操作。首先用一个指针指向链表头节点开始,然后遍历其后面的节点,将与该指针所指节点数据相同的节点删除。然后将该指针后移一位,继续上述操作。直到该指针移到链表。

void delete_duplicate1(node* head){

node*pPos=head->next;

node*p,*q;

while(pPos!=NULL){//用pPos指针来指示当前移动到什么位置了

p=pPos;

q=pPos->next;

while(q!=NULL){//遍历pPos后面的所有节点,找出节点值与pPos所指节点相同的节点,将其删除

if(pPos->data==q->data){

node*pDel=q;

p->next=q->next;

q=p->next;

free(pDel);

}

else{

p=q;

q=q->next;

}

}

pPos=pPos->next;

}

}

方法二:如果允许使用额外的空间,则能通过空间换时间,来降低算法的复制度。可以使用hash表来完成,既然是面试题,我们这里可以暂时先不考虑使用hash可能带来的一些问题,先假设它是完美的。即假设它能将任意整数hash到一定范围,不会出现负数下标,不会出现hash冲突等。

复制代码 代码如下:

void delete_duplicate2(node* head)

{

node*p=head->next;

node*q=p->next;

memset(hash,0,sizeof(hash));

hash[p->data]=1;//置为1,表示该数已经出现过

while(q!=NULL){

if(hash[q->data]!=0){

node*pDel=q;

p->next=q->next;

q=p->next;

free(pDel);

}

else{

hash[q->data]=1;//置为1,表示该数已经出现过

p=q;

q=q->next;

}

}

}

JAVA参考代码:

复制代码 代码如下:

public static void deleteDups(LinkedListNode n) {

Hashtable table = new Hashtable();

LinkedListNode previous = null;

while (n != null) {

if (table.containsKey(n.data)) previous.next = n.next;

else {

table.put(n.data, true);

previous = n;

}

n = n.next;

}

}

public static void deleteDups2(LinkedListNode head) {

if (head == null) return;

LinkedListNode previous = head;

LinkedListNode current = previous.next;

while (current != null) {

LinkedListNode runner = head;

while (runner != current) { // Check for earlier dups

if (runner.data == current.data) {

LinkedListNode tmp = current.next; // remove current

previous.next = tmp;

current = tmp; // update current to next node

break; // all other dups have already been removed

}

runner = runner.next;

}

if (runner == current) { // current not updated - update now

previous = current;

current = current.next;

}

}

}

【编码实现从无序链表中移除重复项(C和JAVA实例)】相关文章:

java定时调度器(Quartz)使用实例

java web项目实现文件下载实例代码

Java 中实现随机无重复数字的方法

des加密解密JAVA与.NET互通实例

java 删除数组元素与删除重复数组元素的代码

用C和JAVA分别创建链表的实例

java实现合并两个已经排序的列表实例代码

java unicode转码为中文实例

Java IO文件编码转换实现代码

教你如何编写简单的网络爬虫

精品推荐
分类导航