首页 > 其他 > 详细

题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。

时间:2015-04-04 22:38:10      阅读:559      评论:0      收藏:0      [点我收藏+]

题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:

struct ListNode
{
    int       m_nKey;
    ListNode* m_pNext;
};

c语言实现

/*
	File : rlink.c
	Author : 
	Date : 2015/4/4
	platform : windows7 x86_64
	version : 1.0
	Function : 反转一个链表
*/

#include <stdio.h>
#include <stdlib.h>
typedef struct _LinkNode
{
	int m_nKey;
	struct _LinkNode* m_npNext;
}LinkNode , *pLinkNode;
/*
	创建链表  以0结尾
*/
pLinkNode create()
{
	pLinkNode pHead = NULL , pCur , pNext;
	int nData;
	if(scanf("%d" , &nData) , nData)
	{
		pHead = (pLinkNode)malloc(sizeof(LinkNode));
		pCur = pNext = pHead;
		pHead->m_nKey = nData;
		pNext->m_npNext = NULL;
	}
	else
	{
		return NULL;
	}
	while(scanf("%d" , &nData) , nData)
	{
		pNext = (pLinkNode)malloc(sizeof(LinkNode));
		pNext->m_nKey = nData;
		pCur->m_npNext = pNext;
		pCur = pNext;
		pNext->m_npNext = NULL;
	}
	return pHead;
}
void showLink(pLinkNode pHead)
{
	while(pHead)
	{
		printf("%d " , pHead->m_nKey);
		pHead = pHead->m_npNext;
	}
	printf("\n");
}
pLinkNode reverseLink(pLinkNode pHead)
{
	pLinkNode pCur , prHead ;
	pCur = pHead->m_npNext;
	if(!pHead)
	{
		return NULL;
	}
	prHead = pHead;
	while(pCur)  
	{
		pHead->m_npNext = pCur->m_npNext;     // A->B->C->D->NULL     pHead = prHead = A       
		pCur->m_npNext = prHead;              //pCur->m_npNext变为新的头节点
		prHead = pCur;
		pCur = pHead->m_npNext;               //pCur始终是pHead->m_npNext
	}
	return prHead;
}
int main(int argc , char *argv[])
{
	pLinkNode pHead = create();
	showLink(pHead);
	pHead = reverseLink(pHead);
	showLink(pHead);
	return 0;
}


题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。

原文:http://blog.csdn.net/u011185633/article/details/44876583

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!