逆转单链表
来源:互联网 发布:岂凡网络年终奖 编辑:程序博客网 时间:2024/04/30 10:47
//逆转单链表
struct node *reverse_LList(node *head)
{
//以p作为当前结点处理,头结点为逆转前的头结点
struct node *p,*q,*temp;
if(head == NULL) cout << "空表" << endl;//头结点为0,空表
q = head; //q指向头结点
p = head->next; //p指向头结点后一个结点
head = p; //头结点进一位
temp = p->next; //保存当前结点指针域
q->next = NULL; //逆转头结点为尾结点的情况,头指针为空
p->next = q; //后一个结点指向头结点
while(temp->next != NULL) //判断当前结点的后一结点指针域是否为空,即判断是否为尾结点
{
q = head; //q指向头结点
p = temp; //p指向头结点后一个结点
temp = p->next; //保存当前结点指针域
head = p; //头结点进一位
p->next = q; //后一个结点指向头结点
}
//此时temp表示以前的尾结点,p表示temp结点的前一结点
head = temp; //逆转尾结点为头结点
head->next = p; //头结点指针域指向p
return head;
}
//逆转循环链表
struct node *reverse_LList(node *head)
{
//以p作为当前结点处理,
struct node *p,*q,*temp,*s;
int count = 0;
if(head == NULL) cout << "空表" << endl;//头结点为0,空表
do
{
q = head; //q指向头结点
temp = p->next; //保存当前结点指针域
p = temp; //p指向头结点后一个结点
head = p; //头结点进一位
p->next = q; //后一个结点指向前一结点
if(count == 0) {q->next = s} //记录下第一个结点
count++;
}while(temp->next != head); //判断当前结点的后一结点指针域是否为逆转前的头结点,即判断是否为尾结点
//循环完之后,此时temp表示以前的尾结点,p表示temp结点的前一结点
head = temp; //逆转尾结点为头结点
head->next = p; //头结点指针域指向p
s = head; //s指向头结点
return head;
}
//逆转双向链表
struct node *reverse_bilateral_LList(node *head)
{
struct node *p,*q,*tp,*tq;
//处理尾结点的情况, 即将head结点逆转为尾结点.
q = head; //q指向头结点
p = head->next; //p指向头结点后一结点
tp = p->next; //tp存储p的右指针域
//先处理p结点
p->next = q; //p的右指针指向q
p->prior = tp; //p的左指针指向它的下一个元素
//再处理q结点
q->prior = p; //q结点左指针指向p
q->next = NULL; //q结点右指针为空,表示逆转后尾结点next为空
while(tp->next != NULL)
{
tp = p->next; //tp存储p的右指针域
p = tp; //p结点进一位
tq = q->next; //tq存储q的右指针域
q = tq; //q结点进一位
//先处理p结点
p->next = q;
p->prior = tp;
//再处理q结点
q->prior = p;
q->next = head; //q结点右指针区域指向该结点的前一个元素,即head结点.
head = q; //head结点进一位
}
//最后再处理头结点情况,即将尾结点逆转为头结点.
head = tp;
head->next = p;
head->prior = NULL;
return head;
}
深受liupengty前辈教诲,不敢不举一反三,以谢厚望,如有错误还请前辈指教
- 单链表逆转
- 逆转单链表
- 单链表逆转
- 逆转单链表
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 逆转单链表
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 单链表逆转
- 逆转单链表
- linux系统的进程间通信有哪几种方式,及优劣?
- 飞鸽传书(IPMSG)的主要工作原理
- 头发长
- 查找整数数组中第二大的数
- 在Oracle10g中如何删除归档日志
- 逆转单链表
- 幸福的一年来到了!~ 我相信以后的一切都会很美好!~
- Win7安装Oracle10gR2
- 一个单向链表,只知道某个节点的指针p,但是p不是尾节点,请编程删除节点p.
- CentOS5.5安装ORACLE10GR2
- Meego已死?
- 反虚拟机技术
- 随性、随遇、随缘、随喜
- VeryCD转型的应对措施,让我们继续分享互联网!!!