社区
C语言
帖子详情
写一个程序求链表的异或!!要源代码
bing_shan
2005-05-21 02:30:18
写一个程序求链表的异或!!要源代码
...全文
77
1
打赏
收藏
写一个程序求链表的异或!!要源代码
写一个程序求链表的异或!!要源代码
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
llf_hust
2005-05-21
打赏
举报
回复
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}*Node;
void Create(struct Node **head)
{
int a;
struct Node *tail, *p;
printf("please input data end of 0.\n");
scanf("%d",&a);
p = (struct Node *) malloc (sizeof(struct Node));
p->data = a;
p->next = *head;
*head = p;
tail = p;
scanf("%d", &a);
while(a)
{
p = (struct Node *) malloc (sizeof(struct Node));
p->data = a;
p->next = NULL;
tail->next = p;
tail = p;
scanf("%d",&a);
}
}
int Length(Node p)
{
int len = 0;
while ( p != NULL)
{
len++;
p = p->next;
}
return len;
}
void Display(Node p)
{
while(p != NULL )
{
printf(" %d",p->data);
p = p->next;
}
printf("\n");
}
struct Node *Fun(struct Node *a, struct Node *b)
{
int len1 = 0, len2 = 0;
struct Node *p,*p1= NULL,*p2;
len1 = Length(a);
len2 = Length(b);
if ( len1 != len2)
{
printf("Error\n");
return NULL;
}
else
{
p = (struct Node *) malloc(sizeof(struct Node));
p->data = a->data ^ b->data;
p->next = p1;
p1 = p;
p2 = p;
a = a->next;
b = b->next;
while ( a != NULL && b != NULL)
{
p = (struct Node *) malloc (sizeof(struct Node));
p->data = a->data ^ b->data;
p->next = NULL;
p2->next = p;
p2 = p;
a = a->next;
b = b->next;
}
}
return p1;
}
void Del(struct Node **p)
{
struct Node *a;
while(*p)
{
a = (*p)->next;
free(*p);
*p = a;
}
}
main()
{
int a;
struct Node *p = NULL ,*p1 = NULL, *p2;
clrscr();
Create(&p);
Create(&p1);
p2 = Fun(p,p1);
Display(p2);
Del(&p);
Del(&p1);
Del(&p2);
printf("\n");
system("pause");
}
算法导论 第十章 10.2-8 用单指针域实现双
链表
数学基础 利用单指针域实现双
链表
的关键在于如何能够得到前驱和后继的地址,只有这样才能称之为双
链表
。我们可以运用
异或
的性质,如下: a⊕b = b⊕aa⊕a = 0a⊕0 = aa⊕(a⊕b) = (a⊕a)⊕b = b(a⊕b)⊕b = a⊕(b⊕b) = a 双
链表
逻辑结构 首先,我们给出
链表
节点的结构(C++模板)和逻辑图,然后再仔细讲
数据结构与算法实验4——链式描述线性表
1.实验内容 实验4.1 要
求
封装
链表
类,
链表
迭代器类;
链表
类需提供操作:在指定位置插入元素,删除指定元素,搜索
链表
中是否有指定元素,原地逆置
链表
,输出
链表
; 不得使用与
链表
实现相关的STL。 输入输出格式: 输入:第一行两个整数 N 和 Q。 第二行 N 个整数,作为节点的元素值,创建
链表
。 接下来 Q 行,执行各个操作,具体格式如下: 插入操作 : 1 idx val,在
链表
的idx位置插入元素val; 删除操作 : 2 val,删除
链表
中的 val 元素。若
链表
中存在多个该元
HashMap多线程死循环解析,数组扩容为2的幂次方与hashcode计算需右移16位做
异或
运算原因
总结一句即,因为扩容使用头插法导致扩容之后
链表
顺序改变了,当双线程时出现
一个
线程阻塞,另
一个
线程完成扩容之后,对于阻塞线程来说,next位置与实际位置不匹配,且成为环状,这样再扩容时候会出现环形
链表
。当数组长度不是2的幂次方时,其二进制数至少会有一位为0,跟hash与运算得到的二进制数那一位也必定是0,也就是说那一位为1所对应的下标时永远取不到的,这造成资源浪费。此时出现问题,对于线程2来说,e2引用的3的next是2,但实际上3的next是null。扩容之后,因使用头插法,所以
链表
的顺序改变了。
晦涩难懂的hashmap
源代码
-put方法解析
jdk版本:jdk1.8.0_171。hashmap是用于key-value键值对处理的数据类型。
【
链表
面试题:腾讯】反转
链表
前言 ★ 这里是小冷的博客 ✓ 优质技术好文见专栏 个人公众号,分享一些技术上的文章,以及遇到的坑 当前系列:数据结构系列
源代码
git 仓库 ‘ 数据结构代码地址 代码Git 仓库地址 反转
链表
思路 * 1.先定义
一个
节点 reverseHead = new HeroNode(); * 2.从头遍历原来的
链表
,每次遍历
一个
节点就将其取出并且放到信的
链表
的最前端, * 3.原来的
链表
head.next = reverseHead.Next 思路执行流程图 代码 /** * @
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章