两个双向链表删除相同元素

原创 2011年08月10日 10:26:18

参考:http://hi.baidu.com/beyond748/blog/item/cdeefb1ce3638a8d87d6b6c7.html/cmtid/6145d62fdd4a92361f3089e8


#include "stdafx.h"
//#include "list.h"
#include <iostream>
#include <vector>
using namespace std;

typedef struct node{
int data;
struct node *front, *next;
}node, *linkHead;
//记录删除的元素
int delCnt=0;
int delTmp[16];

void creatList(linkHead *head, int ary[], int n){
int c=0;
linkHead p;
// head;
linkHead h= (linkHead)malloc(sizeof(node));
h->next=NULL;
h->front=NULL;
h->data=n;
*head = h;


while(c<n){
p = (linkHead)malloc(sizeof(node));
h->next = p;
p->front= h;
p->data = ary[c++];
h = p;
p->next = NULL;
}
}

void printList(const linkHead head)
{
linkHead p=head->next;
while(p){
printf("%d\n", p->data);
p = p->next;
}
}

int delNode(linkHead *head, int val, int save)
{
linkHead pNode; 
linkHead p = (*head)->next;
while (p)
{
if (p->data==val) {
if (save==1) delTmp[delCnt++]=p->data;
if (p->next){
pNode = p->next;
p->front->next=p->next;
p->next->front=p->front;
free(p), p=NULL;
p = pNode;
}else{
p->front->next=NULL;
free(p), p=NULL;
}

}else
p = p->next;
}


return 1;
}

void delSame(linkHead *head1,linkHead *head2){
linkHead p = (*head1)->next;
while(p){
delNode(head2, p->data, 1);
p=p->next;
}

for(int i=0; i<delCnt; i++){
delNode(head1, delTmp[i], 0);
}
}

void main()
{
int aa[]={1,2,3,4,5,6};
int bb[]={3,4,5,6,7,8,9,10,11,4,2};
linkHead list1,list2;
creatList(&list1,aa, sizeof(aa)/sizeof(aa[0]));        
creatList(&list2,bb, sizeof(bb)/sizeof(bb[0]));
//delSame(&list2,&list1);
delSame(&list1,&list2);

printf("\n");
printList(list1);
printf("\n");
printList(list2);
}

相关文章推荐

经典面试题--两个双向链表删除相同值

#include "stdafx.h" #include using namespace std; struct Node // 节点的定义 { int data; Node...

删除两个双向链表值相同的结点

有双向循环链表结点定义为:     struct node     {           int data;          struct node *front,*next;     ...

STL双向链表之删除重复元素(list)

数据结构上机测试2-2:单链表操作B Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 按照数据输入的相反顺序...

删除两个双向链表中相同元素的所有节点

题目: 两个双链表1,2分别以头节点数据域全为F开头,且两个链表中分别有多个元素可能相同。 设计函数intDeleteSameNodes(Node *pHeadA, Node *pHeadB); ...

删除两个双向链表中值相同的结点--无空白头结点

有两个双向链表,头指针为:pListA和pListB,要求删除这两个链表中值相同的结点, C语言实现,结点结构如下: struct node // 双向链表结点 { int ke...

删除循环双向链表中指定元素

  • 2013年11月05日 23:46
  • 2KB
  • 下载

双向链表的创建查找与删除元素

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表...

双向链表元素的删除

struct Node { int Data; struct Node* prior; struct Node* next; }; ...

雅虎面试题─将两个双向循环链表中data值相同的结点删除

有双向循环链表结点定义为: struct node {    int data;   struct node *front,*next; }; 有两个双向循环链表A,B,知道其...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两个双向链表删除相同元素
举报原因:
原因补充:

(最多只允许输入30个字)