首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

高质量的代码,面试题,最接近标准答案的代码到底是什么

2013-04-20 
高质量的代码,面试题,最贴近标准答案的代码到底是什么?typedef struct LNode{ElemType datastruct LNode

高质量的代码,面试题,最贴近标准答案的代码到底是什么?



typedef struct LNode
{
ElemType data;
struct LNode * next;

}LNode,*LinkList;

编写算法从 有序表A中删除所有和 有序表B中元素相同的节点。

要求:

1.代码可读性
2.健壮性

时间:30min
[解决办法]
tag 和 类型不要共享标识符,提高可读性。

typedef struct tagLNode
{
  ElemType data;
  struct tagLNode * next;
}LNode,*LinkList;


[解决办法]
第一次答题,见笑。输入的数字可以重复。运行过了,没什么问题。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct LNode
{
int  data;
struct LNode * next;
 
}LNode_t;

int insertToList(LNode_t *list_a,int val_i)
{

    LNode_t *newNode = NULL;
    newNode = (LNode_t*)malloc(sizeof(LNode_t));
newNode->data = val_i;
newNode->next = NULL;
(list_a)->next = newNode;
return 0;
}

int insertListHead(LNode_t *list_a,int val_i)
{
list_a->data = val_i;
list_a->next = NULL;
return 0;
}

int createList(LNode_t *list)
{
   int input = 0;
   int count = 0;
   printf("please input numbers ,seprater with space(example:1 2 3……)\n:");
   do
   {
scanf("%d",&input);
count++;
if(count == 1)
   insertListHead(list,input);
else
{
insertToList(list,input);
list = (list)->next;
}
input = 0;

   }while(getchar()!= '\n');
   return 0;
}
LNode_t * deleteNodeViaValue(LNode_t ** list,int value)
{
LNode_t * list_1 = NULL;
LNode_t * list_2 = NULL;
LNode_t * list_3 = NULL;
if(list == NULL && *list == NULL)
return list_3;
list_1 = *list;
while(list_1->data != value &&list_1->next != NULL)
{
list_2 = (list_1);
list_1 = (list_1)->next;
list_3 = (list_1)->next;
}
if(list_1->data == value)
{
if(list_1 == *list)
{
*list = list_1->next;
list_3 = list_1->next;
}
else
{
list_2->next = list_1->next;
list_3 = list_1->next;
}
free(list_1);
list_1 = NULL;

}

return list_3;
}
LNode_t * delteNode(LNode_t * list_a, LNode_t * list_b)
{
LNode_t * list = NULL;
LNode_t * listEnd = NULL;
list = list_b;
if(list_a == NULL 
[解决办法]
 list_b == NULL )
{
return list_a;
}
while(list != NULL)
{
do
{
listEnd = deleteNodeViaValue(&list_a,list->data);


}while(listEnd != NULL);
list = list->next;
};
return list_a;
}
#define INVAILD_DATE 0xFFFFFFFF
int main()
{
LNode_t *list_a;
LNode_t *list_b;
LNode_t * result;
list_a = (LNode_t*)malloc(sizeof(LNode_t));
list_b = (LNode_t*)malloc(sizeof(LNode_t));
memset(list_a , 0, sizeof(LNode_t));
memset(list_b , 0, sizeof(LNode_t));
list_a->data = 0xffffffff;
createList(list_a);
createList(list_b);

result = delteNode(list_a,list_b);
printf(" list after deleting:");
if(result == NULL)
{
printf("empty!!\r\n");
return 0;
}
while(result != NULL)
{
printf("%d ",result->data);
result = result->next;
}
printf("\r\n");
return 0;
}
[解决办法]
高质量的代码,面试题,最接近标准答案的代码到底是什么
[解决办法]
1. A和B的有序规则一样吗?
2. 可以修改B中元素的顺序吗?
[解决办法]
随便写了一下,代码比较简略粗糙,代码中是假定按照从小到大排序的,你可以考虑其他情况


void DeleteTheSame(LinkList List_A,LinkList List_B)
{
LinkList p_A=List_A;
LinkList p_B=List_B;
LinkList temp;
while(p_A&&p_B)
{
if(p_A->data<p_B->data)//A往前走
{
temp=p_A;
p_A=p_A->next;
}
else if(p_A->data==p_B->data)//从A中删除该元素,并将A往前走
{
if(p_A==List_A)//头结点
{
List_A=List_A->next;
p_A=p_A->next;
}
else
{
temp->next=p_A->next;
p_A=p_A->next;
}
}
else if(p_A->data>p_B->data)//B往前走
{
p_B=p_B->next;
}
}

}

热点排行