2)newNode表示待插入节点,维护newnode指向新节点;
3)
case1:当链表为空时,即首次插入新节点,将head.next指向新插入节点,即 head.next = newNode
case2:如果不是首次插入新节点,将新节点插入到head和head.next指向节点之间,即
newnode.next = head.next
head.next = newNode
1)创建头节点,维护head指针(引用)来指向头节点;
2)newNode表示待插入节点,维护tail指针,指示链表尾节点,当tail.next == null时,表示tail指向尾节点;
3)
case1:当链表为空时,即首次插入新节点,将head.next指向新插入节点,即 head.next = newNode
case2:如果不是首次插入新节点,需要遍历整个链表定位到尾节点,并将新节点插入到尾节点之后,即
tail.next = newNode
每次将待插入的结点链在单链表的最后一个结点的后面
void creatlist(LinkList *LDatatype a[10])
{ L = (LinkList *) malloc (sizeof(struct node))
L->next = NULL //生成头结点
r = L //r为指向表尾的指针
for(i = 0i<=9i++)
{ p = (LinkList *) malloc (sizeof(struct node))
p->data = a[i] //生成新的结点
p->next = NULL
r->next = p //将新生成的结点插在表尾
r = p //将表尾指针指向新插入的结点
}
}
首先,你是C还是C++语言,决定你用malloc函数还是new运算符来动态开辟结点。其次,要设置指针,p1作为新开辟结点,p2指向尾结点。每次开辟一个新节点,就让当前尾结点的next域指向新结点,新结点的next置空,然后让p2重新定位到p1位置,新结点作为尾结点。这是尾插法建表。
再次,如果查找Key值,
k ←key
for (p3=headp3!=p2p3++)
if p3→key == k
then ....↓....
注意,这里找到结点了,就要先把此结点前驱的尾指针指向此节点的后继,然后free或者delete就可以了,你如果想要具体的源代码,那么请参考
C程序设计,第四版,清华大学出版社,谭浩强,习题解答小册上,第十二章结构体和共同体中,关于链表的简单4个 *** 作,
或者是C++程序设计,清华大学出版社,谭浩强,第八章面向过程程序设计,习题解答小册上也有C++版本的单链表处理。
如果你要能编译的源代码来交作业,请查阅上述两本书,绝对有。
如果你是为了学好C或者C++,请认真打扎实基本功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)