通过对链表的学习发现,对链表不同的操作有不同的赋初始值值
下面对比学习
1对链表的值查询
// 在链表中查找值为key的节点 Node * Locate(Node *L, ElemType key) { Node *p = L->next; //从表中第一个节点开始 while(p != NULL) { if (p->data != key) p = p->next; else break; } return p; }
对链表的值查询操作,初始化时 p = L->next
2求链表的长度
// 求链表的长度 int ListLength(Node *L) { int length = 0; Node *p = L->next; while(p != NULL) { length++; p = p->next; } return length; }
对链表的求长度操作也是初始化,p = L->next
3对链表的插入值
// 链表的插入操作 void * insList(Node *L, int i, ElemType e) { LinkList pre = L, s; int k = 0; if(i <= 0) return 0; while(pre != NULL && k < i-1) //直到pre指向第i-1个元素 { k++; pre = pre->next; } if(!pre) { printf("insert increct "); return ERROR; } s = (Node *)malloc(sizeof(Node)); s->data = e; s->next = pre->next; pre->next = s; }
对链表的初始化 pre = L;
与以上两个操作不同。
在此,总结一下对链表的操作
1)查找:在单链表找到第i-1个结点,并由指针pre指示
2)申请:申请新节点s,将其数据域的值为e :s->data = e;
3)插入链表,此操作同尾插法、头插法一致
先操作待插入结点的后面:s->next = pre->next;
载操作待插入结点的前面:pre->next = s;
如下图所示