有一个线性表(a1,a2,……,an),采用带头结点的单链表L存储.设计一算法将其就地逆置. 相关知识点: 试题来源: 解析#include "stdio.h" #include "string.h" #include "ctype.h" #include "stdlib.h" #include "io.h" #include "math.h"
void Reverse(LinkList *&L){ LinkList *p=L-next,*q;LinkList *lst=NULL;//定义一个不带头节点的链栈whi 1e(p!)=NUL,I)//将p所指节点进栈{ q=p-next;p-next=1st /*p节点进栈lst=p;p=q}q=L;//q指向新建链表的尾节点while (lst!=NULL)//出栈所有节点{ g-next=lstq=lst;1st=1st-next...
设计一个算法,将一个带头节点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有节点逆置,即第一个节点的数据域变为an,……,最后一个节点的数据域变为a1。 相关知识点: 试题来源: 解析 答:用P指针扫描单链表,将当前节点*P采用头插法插入到新建的单链表中。对应的算法如下:void Reverse(LinkList &L)...
1设计一个算法,将一个带头结点的数据域依次为a1,a2,.an(n>=3)的单链表的所有结点逆置.设计一个算法,将一个带头结点的数据域依次为a1,a2,.an(n>=3)的单链表的所有结点逆置,即第一个结点的数据域变为an,.,最后一个结点的数据域为a1. 2 设计一个算法,将一个带头结点的数据域依次为a1,a2,.an(n>...
有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成。 分析:线性表中关于逆序的问题,就是用建立链表的头插法.而本题要求不能建立新结点,也就不能把元素重新弄到一个表中.可以将L中的元素作为逆转后的L的元素来源,将L->next设置为空...
}/*逆置函数*/void InitList(LinkList *L){ L = (LinkList)malloc(sizeof(Node));(*L)->next = NULL;}void CreateListHead(LinkList L)//头插法创建 { Node *s;int i=0;srand((unsigned)time(NULL));while(i<10){ s=(LinkList)malloc(sizeof(Node));s->data=rand()%99+10...
有一个线性表(a1,a2,…,an),采用带头节点的单链表L存储,设计一个就地算法将其所有元素逆置。所谓就地算法是指算法的空间复杂度为O(1)。 相关知识点: 试题来源: 解析解:对应的算法如下: void Reverse1(LinkList *&L) { LinkList *p=L->next,*q; //p指向开始节点 L->next=NULL; while (p!=NULL)...
pHead = &HeadList;pRevHead = &RevHeadList;InitList(pHead, 10);printf("原始链表数据:\n");ShowList(pHead);ReverseList(pHead, pRevHead);printf("\n链表反正后的数据:\n");ShowList(pRevHead);return;}void InitList(ListNode * pHead, int n){ListNode * pCurrent = NULL;...
假设链表节点为 struct Node{ _data_type data; Node *next;};则算法如下:void reverse(Node *head){ Node *p,*q; if (head->next == NULL) return; p = q = head->next; while (p->next !=NULL) { head->next = p->next; p->next->next = q; ...
设计一个算法,将一个带头结点的数据域依次为a1,a2,.an(n>=3)的单链表的所有结点逆置,即第一个结点的数据域变为an,.,最后一个结点的数据域为a1. 扫码下载作业帮搜索答疑一搜即得 答案解析 查看更多优质解析解答一 举报void Reverae(LinkList * &head)...