构造一个单链表L,其头结点指针为head,编写程序实现将L逆置

#include<stdio.h> 

#include<stdlib.h> 

#include <malloc.h> 

//

定义存储结构 

typedef struct 

Lnode{ 

int data;  

/*每个元素数据信息*/ 

struct Lnode *next; 

/*后继元素的地址*/ 

} LNode,*LinkList; 

void main() 

void Create_L(LinkList &L,int n); 

void Print_L(LinkList L); 

void ReverseList(LinkList L); 

LinkList La;//

创建单链表La

 int n; 

printf("请输入链表La中的元素个数:\n"); 

scanf("%d",&n); 

Create_L(La,n);//

printf("现在La中的元素顺序为:\n"); 

Print_L(La); 

printf("-------------------------------------\n\n"); 

ReverseList(La); 

printf("逆置后,La的元素顺序为:\n"); 

Print_L(La);

void Create_L(LinkList &L,int n) 

int j=1; 

L=(LinkList)malloc(sizeof(Lnode)); 

L->next =NULL;//先建立一个带头结点的单链线性表L 

for(int i=n;i>0;--i) 

LinkList p=(LinkList)malloc(sizeof(Lnode)); 

printf("请输入链表中的第%d个元素:\n",j++); 

scanf("%d",&p->data); 

p->next=L->next; 

L->next =p; 

}//(逆序实现) 

/* LinkList q=L; 

 for(int i=1;i<=n;i++)  

LinkList p=(LinkList)malloc (sizeof(Lnode)); 

q->next=p; 

p->next=NULL; 

q=q->next  

printf("请输入链表La中的第%d个元素:\n",i); 

 

scanf("%d",&p->data); 

}//(正序实现) 

*/ 

}//

初始化单链表

//

输出单链表

void Print_L(LinkList L) 

LinkList p; 

p=L->next; 

while(p) 

printf("%d ",p->data ); 

p=p->next; 

printf("\n"); 

}

void ReverseList(LinkList L) 

LinkList p,q; 

p=L->next; 

L->next=NULL; 

while(p!=NULL) 

q=p->next;

 /*q指针保留p->next得值*/ 

p->next=L->next; 

L->next=p; 

/*将p结点头插入到单链表L中*/ 

p=q; 

/*p指向下一个要插入的结点*/ 

}

转载于:https://www.cnblogs.com/xufeng123/p/7788463.html

以下是使用C语言实现的带表头结点单链表逆置操作的程序: ```c #include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node *next; } Node, *List; List createList() { // 创建带表头结点单链表 List head = (List)malloc(sizeof(Node)); head->next = NULL; return head; } void insertList(List head, int data) { // 在表头插入新节点 Node *newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = head->next; head->next = newNode; } void printList(List head) { // 遍历并输出单链表 Node *p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } void reverseList(List head) { // 将单链表逆置 Node *p = head->next, *q = NULL; head->next = NULL; while (p != NULL) { q = p; p = p->next; q->next = head->next; head->next = q; } } int main() { List myList = createList(); insertList(myList, 1); insertList(myList, 2); insertList(myList, 3); insertList(myList, 4); printf("原链表:"); printList(myList); reverseList(myList); printf("逆置后的链表:"); printList(myList); return 0; } ``` 在这个程序中,我们首先定义了一个结构体 `Node` 来表示单链表的节点,我们使用 `typedef` 关键字将 `Node` 定义为 `List` 类型,这样 `List` 就可以作为单链表的类型使用。在创建单链表时,我们需要为其加上一个头结点,因此定义了 `createList` 函数来创建带表头结点单链表,并返回表头结点指针。 在插入新节点时,我们是在表头插入的,因此定义了 `insertList` 函数实现在表头插入新节点。在输出单链表时,我们使用 `printList` 函数来遍历单链表,并输出每个节点的值。 在逆置单链表时,我们使用 `reverseList` 函数实现。我们首先定义两个指针 `p` 和 `q`,分别指向当前节点和它的前驱节点。我们从头节点开始,将头节点的下一个节点断开,然后将这个节点移到头节点之后,重复这个过程,直到整个单链表都被遍历完毕,最后头节点的下一个节点就是逆置后的单链表的头节点。 在主函数中,我们先创建一个带表头结点单链表,然后插入一些节点,输出原始单链表,调用 `reverseList` 函数逆置单链表,输出逆置后的单链表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值