一次遍历反转链表
来源:互联网 发布:10天学会单片机 编辑:程序博客网 时间:2024/06/11 16:59
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。
分两种情况:带头结点的链表,不带头结点的链表
#include "stdafx.h"#include<iostream>#include<algorithm>using namespace std;typedef struct node{int data;struct node *next;}Node,*List;List createListWithHead(int n)//创建带头结点的链表{List head = (List)malloc(sizeof(Node));head->data = 0;head->next = NULL;List p = head;for(int i=0;i<n;i++){List no = (List)malloc(sizeof(Node));no->data = i+1;no->next = NULL;p->next = no;p = no;}return head;}List createListWithOutHead(int n)//创建不带头结点的链表{if(n==0)return NULL;List head = (List)malloc(sizeof(Node));head->data = 1;head->next = NULL;List p = head;for(int i=2;i<=n;i++){List q = (List)malloc(sizeof(Node));q->data = i;q->next = NULL;p->next = q;p = q;}return head;}void traverseWithHead(List head)//遍历带头结点的链表{if(head == NULL)return;List p = head->next;while(p){cout<<p->data<<" ";p = p->next;}cout<<endl;}void traverseWithOutHead(List head)//遍历不带头结点的链表{if(head == NULL)return ;List p = head;while(p){cout<<p->data<<" ";p = p->next;}cout<<endl;}void reverseWithHead(List head)//翻转带头结点的链表{if(head==NULL ||head->next==NULL)return;List p = head->next;List q = p->next;while(q){p->next = q->next;q->next = head->next;head->next = q;//p = p->next;q = p->next;}}//翻转不带头结点的链表,这里注意要带返回值,因为head在函数体内部被改变了。//而函数体内部的改变,在函数外面是透明的List reverseWithOutHead(List head){if(head==NULL || head->next==NULL)return head;List p = head;List q = head->next;while(q){p->next = q->next;q->next = head;head = q;q = p->next;}return head;}int main(){int N = 6;//带头结点的操作/*List head = createListWithHead(N);traverseWithHead(head);reverseWithHead(head);traverseWithHead(head);*///不带头结点的操作List head = createListWithOutHead(N);traverseWithOutHead(head);head = reverseWithOutHead(head);traverseWithOutHead(head);getchar();return 0;}
- 一次遍历反转链表
- (C语言)链表的反转(一次遍历)
- 遍历一次反转单链表
- 遍历一次反转单链表
- 遍历一次把单链表反转
- 遍历一次实现单链表顺序反转
- 一次遍历完成单链表的反转
- 遍历一次实现单链表顺序反转
- K链表反转一次和多次
- 合并两个有序链表/链表反转(逆置)/找链表倒数第k点(遍历一次)
- 给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来
- 逆置/反转单链表+查找单链表的倒数第k个节点,要求只能遍历一次链表
- 逆置/反转单链表+查找单链表的倒数第k个节点,要求只能遍历一次链表
- 只遍历一次,将单链表中的元素顺序反转过来
- 遍历一次链表,将元素反过来
- 反转链表遍历算法-代码实例讲解
- 92. Reverse Linked List II【遍历一遍就反转链表】
- 一次遍历单向链表找到中间节点
- 黑马程序员_java学习笔记03
- 我在汕头搞企业管理系统(一)
- SQL Server数据库表主键重置
- 1.3项目计划表
- 重建redo-oracle数据库恢复
- 一次遍历反转链表
- 黑马程序员_java学习笔记04
- POJ 2239 Selecting Courses
- Ubuntu下安装ROI_PAC小记
- [模板]三维几何模板
- connect android with adb over tcp
- mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择
- Linux内存管理(5):分页机制和管理区初始化
- 一日总结之2012-08-26 Sun.