我的位置: 首页 > 学习专区 > .NET技术 > C语言链表逆序技巧

C语言链表逆序技巧

2013-05-30 08:25:36
来源:
[导读] 简洁的做法是遍历链表,元素进栈,遍历的同时销毁原来的链表。元素出栈,建立新链表。高效的是,用指向链表结点指针的指针操作直接首尾交换
简洁的做法是

遍历链表,

元素进栈,

遍历的同时销毁原来的链表。

元素出栈,

建立新链表。

高效的是,

用指向链表结点指针的指针操作

直接首尾交换指针值(两两进行)

一般的是前插法

实际上根本就不用插入,一次遍历就可以完成了。

链表的逆序,必将涉及到两个以上指针,一般用三个指针,

下面是一个人的程序:

struct List1 *reverse(List1 *h) //h为链表的头指针

{

struct List1 *p,*v1,*v2;

v2=h;

v1=NULL;

while( v2!=NULL ){

p=v2->pNext;

v2->pNext=v1;

v1=v2;

v2=p;

}

return v1;

}

另一个人的:

struct IntNode* res(struct IntNode* h)

{

struct IntNode *s, *s1;

s = h;

h = NULL;

while (s)

{

s1 = s;

s = s->next;

s1->next = h;

h = s1;

}

return h;

}

算法都是一致,但顺序不一样,这直接点明了链表操作的核心——顺序,链表的算法主要难在顺序上。

逆序操作中,要将一个指针指向前一个节点,中间必然断开,这就需要两个指针指向断开处的一前一后。

上面两个程序都是这样,不同在于指针移动的位置。

深圳北大青鸟

大家都关注:
评论
热点专题
>>