首页 > 代码库 > 链表的反转
链表的反转
题目:给出一个连续的链表,要求你将其结构改变反转。
例如:
输入: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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。