求解,一个关于c链表效率的有关问题

求解,一个关于c链表效率的问题
//删除数据
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);

------解决方案--------------------
引用:

(pos > 0)?(linklist = linklist->next):(linklist = linklist->prev);
如果这个就不算用if-else了,那是在太简单了吧...
linklist = pos > 0 ? linklist->next : linklist->prev
这样应该更简洁点。
我觉得用用if-else也没影响多少效率啊
------解决方案--------------------
引用:
Quote: 引用:


(pos > 0)?(linklist = linklist->next):(linklist = linklist->prev);
如果这个就不算用if-else了,那是在太简单了吧...
linklist = pos > 0 ? linklist->next : linklist->prev
这样应该更简洁点。
我觉得用用if-else也没影响多少效率啊

额,是简洁了一些,但是没什么区别,所有的执行步骤还都是一样的求解,一个关于c链表效率的有关问题
------解决方案--------------------
不用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;
    }
}