码迷,mamicode.com
首页 > 其他好文 > 详细

链表的反转

时间:2014-05-22 08:16:58      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   c   code   ext   

题目:给出一个连续的链表,要求你将其结构改变反转。

例如:

   输入:1 2 3 4 5

   输出:5 4 3 2 1


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//定义链表的结构
typedef struct ListNode{
	int m_pKey;
	ListNode * m_pNext;
};

//链表的反转
ListNode *ListReverse(ListNode *pHead)
{
    ListNode *pCurrent,*pReversedHead;
	pReversedHead = NULL;
	pCurrent = pHead->m_pNext;
	while(pCurrent != NULL)
	{
		ListNode *pTemp = pCurrent;        //取下当前的点
		pCurrent = pCurrent->m_pNext;      //移到下一个点
		pTemp->m_pNext = pReversedHead;    //将当前的点插入反转后链表的头部
		pReversedHead = pTemp;
		/*printf(" %d  ",pCurrent->m_pKey);*/
	}
	return pReversedHead;
}
int main()
{
	ListNode *Head,*Root,*p;   //Head 链表的头,Root 输入的链表
	int value;
	Root = (ListNode *)malloc(sizeof(ListNode));
	Root->m_pNext = NULL;
	Head = Root;                   
	while(scanf("%d",&value)!=EOF)
	{
		p = (ListNode *)malloc(sizeof(ListNode));
		//尾插法
		p->m_pKey = value;      //赋值
		p->m_pNext = NULL;             
		Root->m_pNext = p;     //插入到链表的尾部
		Root = p;              //链表移动到下一个点

	    /*
		    //头插法
		    p->m_pKey = value;
		    p->m_pNext = Root;
		    Root = p;
		*/
	}
    ListNode * q = ListReverse(Head);
	while(q != NULL)
	{
		printf("%d ",q->m_pKey);
		q = q->m_pNext;
	}
	printf("\n");
	return 0;
}




链表的反转,布布扣,bubuko.com

链表的反转

标签:style   blog   class   c   code   ext   

原文地址:http://blog.csdn.net/zhongshijunacm/article/details/26243277

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!