带头结点的单链表的逆置

来源:互联网 发布:java解析word简历 编辑:程序博客网 时间:2024/05/03 17:19
void Reverse1(List PList){/**** 如果传入的指针为空||只有头结点||只有一个节点,不用逆置 ****/if(PList == NULL || PList->next == NULL || PList->next->next == NULL){return;}/* 不用担心程序崩溃 */Node *p = PList->next;Node *q = PList->next->next;Node *s = NULL;/* 先将原本的第一个节点的next置为NULL,变成尾节点 */p->next =NULL;while(q != NULL){/* s是还未进行逆置的的一个节点,不能在循环尾部,否则程序会崩溃 */s = q->next;/* 节点q->next置为p,则q指向p,完成两个节点的逆置 */q->next = p;/* 将q赋值给p,即将p向前移动一个节点 */p = q;/* q向前移动一个节点 */q = s;}/* 将头节点进行绑定 */PList->next = p;}
/* 利用头插实现单链表的逆置 */void Reverse2(List PList){assert(PList != NULL);Node *p = PList->next;Node *q;/* 断开头结点 */PList->next = NULL;/* 将原本头结点后每一个第一个节点头插到链表中去 */while(p != NULL){q = p->next;p->next = PList->next;PList->next = p;p = q;}}


0 0