链表的应用:常用于播放器,边播放边下载的场景,播放和下载的内容是存储在不同的地址块,通过链表的 next 找到下一个需要加载地址的内容。
疑问?如何辨别流媒体没有被串改过?
struct LYNode {
int data;
struct LYNode *next;
};
@interface LYReverseList : NSObject
//链表反转
struct LYNode *reverseList(struct LYNode *head);
//构造一个链表
struct LYNode *contructList(void);
//打印链表中的数据
void ly_printList(struct LYNode *head);
//释放链表数据
void deleteList(struct LYNode *head);
@end
@implementation LYReverseList
struct LYNode *reverseList(struct LYNode *head){
//定义遍历指针,初始化为头节点
struct LYNode *p = head;
//反转后的链表头部
struct LYNode *newH = NULL;
while (p != NULL) {
//记录下一个节点(第二个节点)
struct LYNode *temp = p->next;
//当前节点新链表头部 NULL
p->next = newH;
//更改链表头部节点为当前节点
newH = p;
//移动 p 指针
p = temp;
}
return newH;
}
struct LYNode *contructList(void){
//头结点定义
struct LYNode *headNode = NULL;
//指向当前节点
struct LYNode *curNode = NULL;
for (int i = 0; i < 5; i++){
struct LYNode *newNode = malloc(sizeof(struct LYNode));
newNode->data = i;
//头结点为空,新节点即为头结点
if (headNode == NULL) {
headNode = newNode;
}else{
//当期节点的next为新节点
curNode->next = newNode;
}
//设置当前节点为新节点
curNode = newNode;
}
return headNode;
}
void ly_printList(struct LYNode *head){
//定义遍历指针,初始指向头结点
struct LYNode *p = head;
while (p != NULL) {
printf("%d ",p->data);
// NSLog(@"结点数据:%d",p->data);
p = p->next;
}
}
void deleteList(struct LYNode *head){
struct LYNode *p = head;
while (p != NULL) {
// delete(p);
free(p);
p = p->next;
}
}
@end
网友评论