求解,一个关于c链表效率的有关问题
求解,一个关于c链表效率的问题
结构体原型为
求解怎么让pos为正数的时候,next循环pos为负数的时候prev循环。要求不能再循环里面使用if语句。
可否找到方法判断pos的值智能切换linklist指向next还是prev?
------解决方案--------------------
------解决方案--------------------
如果这个就不算用if-else了,那是在太简单了吧...
我觉得用用if-else也没影响多少效率啊
------解决方案--------------------
额,是简洁了一些,但是没什么区别,所有的执行步骤还都是一样的
------解决方案--------------------
不用if就效率高啦?我看未必。
//删除数据
int deleteData(linknode *linkhead,int pos)
{
if(linkhead == null || linkhead->next == null)
{
perror("链表为空\n");
return 0;
}
int a;
if(pos > 0)
a = 1;
else
a = -1;
int count;
linknode *linklist = linkhead->next;
for(count = 0;count != pos;count+=a)
{
linklist = linklist->next;
}
}
结构体原型为
typedef struct node{
int data;
struct node *next;
struct node *prev;
}linknode;
求解怎么让pos为正数的时候,next循环pos为负数的时候prev循环。要求不能再循环里面使用if语句。
可否找到方法判断pos的值智能切换linklist指向next还是prev?
链表
------解决方案--------------------
(pos > 0)?(linklist = linklist->next):(linklist = linklist->prev);
------解决方案--------------------
如果这个就不算用if-else了,那是在太简单了吧...
linklist = pos > 0 ? linklist->next : linklist->prev这样应该更简洁点。
我觉得用用if-else也没影响多少效率啊
------解决方案--------------------
额,是简洁了一些,但是没什么区别,所有的执行步骤还都是一样的
------解决方案--------------------
不用if就效率高啦?我看未必。
//删除数据
int deleteData(linknode *linkhead,int pos)
{
if (pos==0) return 1;
if (linkhead == null
------解决方案--------------------
linkhead->next == null) {
perror("链表为空\n");
return 0;
}
linknode *linklist = linkhead->next;
if (pos > 0) {
for (int count = 0;count != pos && linklist!=null; count++) linklist = linklist->next;
} else {//pos < 0
for (int count = 0;count != pos && linklist!=null; count--) linklist = linklist->prev;
}
}