链表的逆序实现
2009-04-27 18:14
323 查看
题目:输入一个链表的头结点,反转该链表。链表结点定义如下:
struct ListNode
{
void* m_nKey;
ListNode* m_pNext;
};
常规实现,需要两个临时节点:
ListNode* ReverseIteratively(ListNode* pHead)
{
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
// get the next node, and save it at pNext
ListNode* pNext = pNode->m_pNext;
// if the next node is null, the currect is the end of original
// list, and it's the head of the reversed list
if(pNext == NULL)
pReversedHead = pNode;
// reverse the linkage between nodes
pNode->m_pNext = pPrev;
// move forward on the the list
pPrev = pNode;
pNode = pNext;
}
递归实现(不需要临时节点):
ListNode* reverse_list( ListNode* head) //逆序
{
ListNode* new_head=head;
if(head==NULL || head->next==NULL)
return head;
new_head = reverse_list(head->next);
head->next->next=head;
head->next=NULL; //防止链表成为一个环,这是最关键的。
return new_head;
}
以上代码都经过测试。
struct ListNode
{
void* m_nKey;
ListNode* m_pNext;
};
常规实现,需要两个临时节点:
ListNode* ReverseIteratively(ListNode* pHead)
{
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
// get the next node, and save it at pNext
ListNode* pNext = pNode->m_pNext;
// if the next node is null, the currect is the end of original
// list, and it's the head of the reversed list
if(pNext == NULL)
pReversedHead = pNode;
// reverse the linkage between nodes
pNode->m_pNext = pPrev;
// move forward on the the list
pPrev = pNode;
pNode = pNext;
}
递归实现(不需要临时节点):
ListNode* reverse_list( ListNode* head) //逆序
{
ListNode* new_head=head;
if(head==NULL || head->next==NULL)
return head;
new_head = reverse_list(head->next);
head->next->next=head;
head->next=NULL; //防止链表成为一个环,这是最关键的。
return new_head;
}
以上代码都经过测试。
相关文章推荐
- 将链表逆序(Revert)的C#实现
- 递归法实现链表逆序
- C语言数据结构实现链表逆序并输出
- 单向链表的逆序,不使用额外节点存储实现
- 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定
- 单向链表的增、删、逆序实现
- 剑指offer面试题java实现之题5:逆序打印链表
- 链表的创建、测长、排序、插入、逆序的实现(C语言)
- 【数据结构】递归实现链表逆序
- 用一个临时变量实现单链表逆序
- java实现单链表(增加节点,删除节点,根据下标获取节点,获取链表大小,链表逆序)
- 实现链表逆序
- C++实现链表逆序
- 面试题:用一个临时变量实现单链表逆序
- 单链表逆序的C++实现
- 数据结构之链表:实现单链表的k逆序(2)
- 单向链表之逆序(C语言实现)
- 链表的实现以及合并,排序,逆序,等
- [转]链表的逆序实现
- 【数据结构练习】单向链表实现、链表逆序实现