线性表总结

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的后继节点

 

posted @ 2019-03-25 17:43  lioY3  阅读(162)  评论(0)    收藏  举报