链表反转 不清楚如何写链表 不清楚函数调用
2019-04-25 15:07
232 查看
#include<iostream> using namespace std; //定义一个链表节点 struct ListNode { int value; ListNode *next; }; //插入一个新节点到链表中(放在链表头部) void CreateList(ListNode * & head, int data) { //创建新节点 ListNode * p = (ListNode*)malloc(sizeof(ListNode)); p->value = data; p->next = NULL; if (head == NULL) { head = p; return; } p->next = head; head = p; } void printList(ListNode* head) { ListNode * p = head; while (p != NULL) { cout << p->value << " "; p = p->next; } cout << endl; } //递归方式:实现单链表反转 ListNode * ReverseList(ListNode * head) { //递归终止条件:找到链表最后一个结点 if (head == NULL || head->next == NULL) return head; else { ListNode * newhead = ReverseList(head->next);//先反转后面的链表,从最后面的两个结点开始反转,依次向前 head->next->next = head;//将后一个链表结点指向前一个结点 head->next = NULL;//将原链表中前一个结点指向后一个结点的指向关系断开 return newhead; } } //非递归方式:实现单链表反转 ListNode* reverseList2(ListNode* head) { if (head == NULL || head->next == NULL) return head; ListNode* prev = head; ListNode* cur = head->next; ListNode* temp = head->next->next; while (cur){ temp = cur->next; //temp作为中间节点,记录当前结点的下一个节点的位置 cur->next = prev; //当前结点指向前一个节点 prev = cur; //指针后移 cur = temp; //指针后移,处理下一个节点 } head->next = NULL; //while结束后,将翻转后的最后一个节点(即翻转前的第一个结点head)的链域置为NULL return prev; } int main() { ListNode * head = NULL; for (int i = 0; i<9; i++) CreateList(head, i); printList(head); head = ReverseList(head); printList(head); system("pause"); return 0; }
相关文章推荐
- Lea指令计算地址(用于四则混合运算),附上一个函数调用例子及其反汇编代码,很清楚
- C++成员函数如何调用线程
- for_each如何调用全局的和类的成员函数举例
- 如何在一个可变参数函数中调用另一个可变参数函数
- 如何打印内核调用堆栈及函数名
- Asp.Net 如何调用js中的函数function ?
- Eel——js 如何调用python的函数
- tornado学习笔记(一):如何给ioloop.run_sync()中调用的函数传入参数
- wpf 如何在一个页面中调用另一个页面的函数
- 如何调用在$(function(){ //内部函数代码 });
- 理解 C++ 中继承层次的关键在于理解如何确定函数调用
- 如何通过JNI在Java中调用C库函数
- C中如何调用C++函数?
- 如何在前台JS代码文件中调用后台CS文件中的某一个函数或控件?!
- 如何直接调用dll中的函数
- 单元测试时如何设定私有变量、调用私有成员函数
- 如何调用Linux内核没有导出的函数
- 思路:如何跳过CreateProcess调用底层创建进程函数
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- 如何调用自己写的python函数?