算法思想:数据结构中创建单链表有顺序创建与逆序创建两种方式,参考一下单链表的,然后双链表的主要是前驱指针的指向要正确就可以了。
struct Node *Reversion(struct Node *h)
{
struct Node *head,*p=NULL,*temp=NULL;
head=h;
//从第一个节点开始,其后每个节点都插在head的后面
p = head->next;
//提取出头节点
head->next = NULL;
while (p != NULL)
{
//以下为插入操作,并把前驱后继指针指向正确的位置
temp = p->next;
p->next = head->next;
//最初的第一个节点将成为变换后的最后一个节点,它无后继节点
if (p->next != NULL)
{
p->next->pre = p;
}
p->pre = head;
head->next = p;
p = temp;
}
}
追问真心的感谢你的回答,但能不能就直接写双向链表的,我真的不会改。非常感谢!!
追答这个函数本身就是用于双向链表的
追问那再写一个呗!设一个数组存放有N个自然数,现设计一个算法实现将所有的偶数均放在奇数之后。要不我加你QQ吧,以后有什么问题可以请教你啊。
追答1)我很少上qq,有问题可以发私信问呀。
2)“设计一个算法实现将所有的偶数均放在奇数之后”,用快速排序的思想,非常快就能解决的了
追问怎么写啊,还有要求的要求用栈和队列写。
追答用栈和队列,这也不难吧,对数组一趟for循环,碰到奇数放入栈,碰到偶数放入队列。或者碰到奇数放入队列,碰到偶数放入栈都可以。然后按照先放奇数,后放偶数入栈的方式放回原数组。