(7)--逆序创建链表及链表反转

 1 #include <iostream>
 2 using namespace std;
 3 typedef struct LNode
 4 {
 5     int data;
 6     LNode *next;
 7 }LNode,*LinkList;
 8 //逆位序输入n个元素的值,建立带头结点的单链线性表
 9 LinkList createLinklist(LinkList &L)
10 {
11     L = (LinkList)malloc(sizeof(LNode));
12     L->next = NULL;//建立头结点
13     for (int i = 0; i <= 10;i++) {
14         LinkList p = (LinkList)malloc(sizeof(LNode));
15         p->data = i;
16         p->next = L->next;
17         L->next = p;
18     }
19     return L;
20 }
21 //链表反转
22 LinkList listReversal(LinkList &L)
23 {
24     LinkList preNode=NULL; //前一个节点
25     LinkList node = L->next;     //后一个节点
26     LinkList nextNode = NULL;//中间节点
27     while (node!=NULL) {
28         nextNode = node->next;  //保存下一个节点的值
29         node->next = preNode;    //把当前节点的下一个节点指向preNode;
30         preNode = node;            //将preNode向后移动指向此时的node
31         node = nextNode;        //将node向后移动指向nextNode
32     }
33     L->next = preNode;
34     return L;
35 }
36 int main()
37 {
38     LinkList linkList;
39     LinkList L=createLinklist(linkList);
40     LinkList LL=listReversal(L);
41     LL = LL->next;
42     while (LL) {
43         cout << LL->data << " ";
44         LL = LL->next;
45     }
46     cout << endl;
47     return 0;
48 }
时间: 2024-10-11 01:31:04

(7)--逆序创建链表及链表反转的相关文章

设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来

之前有过整理链表等的概念和基本算法.比较重要的是插入,删除,遍历,建表(尾插法,头插法) 回忆链表尾部插入结点:  1 #include <iostream> 2 using namespace std; 3  4 typedef struct Node{ 5     int data;//数据域 6     Node *next;//指针域 7 } Node, *List; 8  9 //在单链表的末位添加一个结点10 void addNode(List *head, int value)1

java版的单向链表的逆序输出

将单向链表逆序输出,方法有三种: a.遍历链表,将每个节点的内容存入一个数组中,然后逆序输出数组(最简单的做法) b.使用栈来逆序输出 c.直接将链表逆序然后输出(本文采用的方法) 先介绍算法: 1). 若链表为空或只有一个元素,则直接返回: 2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继: 3). 重复2),直到q为空 4). 调整链表头和链表尾 示例:以逆序A->B->C->D为例,图示如下 package com.moluo.shujujiegou;

数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个). 输入 第一行输入元素个数n: 第二行输入n个整数. 输出 第一行输出初始链表元素个数: 第二行输出按照逆位序所建立的初始链表: 第三行输出删除重复元素后的单链表元素个数: 第四行输出删除重复元素后的单链表. 示例输入 10 21 30 14 55 32 63

算法--链表的K逆序问题

转载请标明出处http://www.cnblogs.com/haozhengfei/p/9e6f4dda3138cf9fab17f996ec85b624.html 链表的K逆序问题 链表的k逆序 第7节 链表的k逆序练习题 有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点.例如链表1->2->3->4->5->6->7->8->null,K=3这个例子.调整后为,3->2->1->6-&g

C语言实现链表的逆序打印

我在前面几篇博客中<C语言实现链表节点的插入><C语言实现链表节点的删除><C实现头插法和尾插法来构建链表><C语言实现链表的基本操作>实现了链表的很多增删改查操作.这里我们要来实现链表的逆序打印,使用C来实现.代码上传至 https://github.com/chenyufeng1991/ReverseLinkedList . 基本算法是: (1)使用尾插法构建原链表: (2)依次遍历原链表: (3)取出遍历中的节点使用头插法建立一个新链表: (4)打印逆

链表 - 单链表逆序

单链表逆序是经典的链表操作算法,单链表逆序的算法思想是将链表箭头反指(假设next指针是一个箭头),即所谓的改链,改链过程如下. 逆序前: head-->......prev-->cur-->next-->......->NULL 逆序后: NULL<--......prev<--cur<--next<--......head 算法逻辑: 1.空链表或只有一个元素,返回原链表head. 2.定义3个指针prev.cur.next,初始化时,prev指向

数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)

代码注释比较详细: #include <iostream> #include <cstdlib> using namespace std; struct Node{ int data; Node* next; }; Node* head = NULL; bool create() { head = (Node*)malloc(sizeof(Node)); if(NULL == head) return false; head->data = 0; head->next

链表的创建及逆序打印

1.链表的创建,以下: void AddToTail(Link ** head,int value) { Link * p = new Link(); Link * ahead = *head; p->value = value; p->next = NULL; if(*head == NULL) *head = ahead = p; else { while(ahead->next) { ahead=ahead->next; } ahead->next = p; } } 以

华为机试题-- 单链表逆序

[问题] 单链表逆序 [代码] #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ListNode { int value; struct ListNode *next; }ListNode; typedef struct ListNode *List; List reverseList(List head) //列表逆序 { ListNode *rear, *curr,