几个链表逆序的实现方法
2011-09-08 00:00
507 查看
链表逆序就是把一个链表按照原来的链接顺序逆序实现(也就是将头变成尾,尾变成头)。
编程思路:其实最关键的是先通过原来的链接顺序找到下个节点,然后再把前个节点反序。
链表的头节点如下:
常规实现:
递归实现(不需要临时节点):
编程思路:其实最关键的是先通过原来的链接顺序找到下个节点,然后再把前个节点反序。
链表的头节点如下:
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; }
相关文章推荐
- C语言:链表的逆序,两种思考方法,第一种用rev_1()实现,第二种用rev_2( )实现.
- 链表逆序的实现方法
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- 队列基于链表和数组的实现方法(java)
- PHP实现双链表删除与插入节点的方法示例
- 单链表(二):如何实现单链表的排序、逆置(逆序)
- 两种方法实现链表的节点操作排序
- 用C++类实现单向链表的增删查和反转操作方法
- java 单例模式 几个实现方法
- 用两种方法实现栈---顺序表和链表
- 采用二叉链表存储结构,实现其各种遍历的方法
- 从尾到头打印链表(五种方法包括链表翻转、递归、栈、容器逆序)
- 链表去重操作-两种方法的实现
- C语言数据结构实现链表逆序并输出
- java实现二维码生成的几个方法
- 【数据结构练习】单向链表实现、链表逆序实现
- 链表的创建、测长、排序、插入、逆序的实现(C语言)
- 实现无限级分类的几个重要方法
- 递归方法实现逆序
- 带头结点的单链表实现就地逆置的更优方法