跳到正文

2.3.1 单链表的定义

40 分钟

2.3.1 单链表:结点地址不连续,逻辑次序仍连续

单链表把元素分成数据域和指针域:

typedef struct Node { int data; struct Node *next; } Node;

next 保存后继结点地址,最后一个结点的 nextNULL。结点可散落在内存中,链由指针维持,因此扩展容量灵活,却失去了按位随机访问。

带头结点与不带头结点必须分清。带头结点时,头指针指向一个不存放普通元素的哨兵;第一个数据结点是 head->next,空表条件是 head->next==NULL。不带头结点时,头指针直接指向第一个数据结点,空表是 head==NULL。头结点让首位插入、删除与中间位置使用同一套指针规则。

求第 个元素必须从头沿链走 步,时间 。若已持有某结点指针,在其后插入只改常数个指针,是 ;若题目只给位序,还要先定位前驱,整体为

陪做:带头结点的链 H -> 4 -> 9 -> NULLH 不是第 1 个元素,表长是 2;第 2 个数据结点需从 H 走两条 next 边。画图时用方框表示结点、箭头表示地址关系,不要把地址大小误当逻辑先后。

错解反馈:把 head==NULL 当所有带头链表的空表条件,会把已创建的空表误判;说链表“插入永远 ”漏掉了定位前驱;把头指针与头结点混为一物,则无法解释指针变量和堆上结点的区别。

迁移练习:不带头结点的链表在首部插入 x 应怎样改指针?答案 new->next=head; head=new;,因此函数必须能更新调用者的头指针。独立验收:能分别画出两种空表和一个含两元素的状态,并写出第 个结点的定位步数。

小纸条

单选:带头结点的普通单链表为空条件是?A head==NULL B head->next==NULL C head->next==head D head->data==0

登录 后可看答案

Practice

本课练习

0

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

本课练习正在补齐,暂不应标记为完成。