线性表总结
1.代码段1
简介:实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表为带头结点链表。
1.1 代码1
1 #include <iostream> 2 using namespace std; 3 typedef int ElemType; 4 typedef struct LNode //定义单链表结点类型 5 { 6 ElemType data; 7 struct LNode *next; //指向后继结点 8 } LNode, *LinkList; 9 void CreateListR(LinkList &L, int n);//尾插法建链表 10 void DispList(LinkList L);//输出链表 11 void DestroyList(LinkList &L);//销毁链表 12 void ReverseList(LinkList &L);//逆转链表 13 int main() 14 { 15 LinkList L; 16 int n; 17 cin >> n;//输入链表节点个数 18 CreateListR(L, n);//尾插法建带头结点链表,细节不表 19 ReverseList(L);//逆转链表 20 DispList(L);//输出链表,细节不表 21 DestroyList(L);//销毁链尾,细节不表 22 system("pause"); 23 return 0; 24 } 25 26 void ReverseList(LinkList& L) 27 { 28 LinkList p, s, r; 29 s = NULL; 30 p = L->next; 31 while (p != NULL) 32 { 33 r = p->next; 34 p->next = s; 35 s = p; 36 p = r; 37 } 38 L->next = s; 39 }
1.2 不懂得地方
26~39行,不理解为什么这么写
代码分析:参考了网络上的代码,单链表的原地逆置,将后一个元素指向前一个元素
2.代码段2
简介:在双链表中删除第i个节点
2.1 代码2
1 bool listDelete(DLinkNode*& L, int i, ElemType& e) 2 { 3 int j = 0; 4 DLinkNode* p = L, * q; 5 if (i <= 0) return false; 6 while (j < i - 1 && p!=NULL) 7 { 8 j++; 9 p = p->next; 10 } 11 if (p == NULL) return false; 12 else 13 { 14 q = p->next; 15 if (q == NULL) return false; 16 e = q->data; 17 p->next = q->next; 18 if (p->next != NULL) 19 p->next->prior; 20 free(q); 21 return ture; 22 } 23 }
2.2 不懂得地方
14~19行,对链表不熟悉,阅读代码有困难
代码分析:先查找第i-1个节点p,然后删除节点p的后继节点

浙公网安备 33010602011771号