题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。
2015-04-04 21:47
155 查看
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:
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;
}
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;
}
相关文章推荐
- 第13题: 题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的尾指针。
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。
- 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 给定一个循环链表,实现一个算法返回这个环的开始结点
- 一个带头结点的单链表反转
- 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表 的尾指针
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 13、输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个链表的头结点,从尾到头反到来输出每个结点的值。
- 面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- 输入一个单向链表,输出该链表中倒数第k个结点
- [java 面试100道]13.输入一个单向链表,输出该链表中倒数第k个结点。
- 链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。 用C语言编写 用以存放输入的二进制数 建立 一个带头结点的线性链表