逆转单向链表

#include  <iostream>

using  namespace  std;

typedef  struct  LNode*  PtrToLNode;
struct  LNode{
        long  data;
        PtrToLNode  next;
};

//  逆转单向链表函数
void  reverseList(PtrToLNode  head)
{

 	PtrToLNode head1=head->next;
PtrToLNode  pre,phead,temp;
	phead = head1;  //将phead指向链表头,做游标使用
	pre = NULL;  //pre为头指针之前的节点
	while(phead != NULL){
		temp = pre;
		pre = phead;
		phead = phead->next;
		pre->next = temp;  //pre接到之前的节点 
	}
	head->next=pre;
 

}

void  printList(PtrToLNode  head)
{
        PtrToLNode  p  =  head->next;
        while(p!=NULL)
        {
                cout  <<  p->data  <<  "  ";
                p  =  p->next;
        }
        cout  <<  endl;
}

int  main()
{
        long  data[8]  =  {10,  45,  895,  371,  908,  425,  -484,  0};
        int  arrSize  =  sizeof(data)/sizeof(data[0]);
        //  将数组  data  创建带头结点的为一个单向链表  
        PtrToLNode  head,p,tail;
        head  =  tail  =  new  struct  LNode;
        for(int  i  =  0;  i  <  arrSize;i++){
                p  =  new  struct  LNode;
                p->data  =  data[i];
                p->next  =  NULL;
                tail->next  =  p;
                tail  =  p;
        }
        //  逆置单向链表  
        reverseList(head);
        //  顺序打印输出单向链表中各个节点的data数据  
        printList(head);
        //  释放链表空间  
        while(head->next!=NULL){
                p  =  head->next;
                head->next  =  p->next;
                delete  p;
        }
        delete  head;
        return  0;
}

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值