Practice

  • Practice已关闭评论
  • 36 次浏览
  • A+
所属分类:linux技术
摘要

18.链表只能一个接着一个遍历,不允许通过随机访问

7.链表的地址是连续的,通过内部的指针来进行访问

18.链表只能一个接着一个遍历,不允许通过随机访问
Practice
7.链表的地址是连续的,通过内部的指针来进行访问
Practice

//假设该链表只给出了头指针 head。在不改变链表的前提下,请设计一个尽可能高效的算法, //查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的 data值,并返回 1;否则,只返回 0。  int LList_Seek(LList_t *head,int k) {     if(NULL == head -> next)     {         perror("head is empty");         return 0;     }     int cnt = 0;     LList_t *p = head -> next;  //若指向头节点,则循环内不需要等于     while(head ->next)     {         p = p -> next;         cnt++;     }     p = head -> next;  //指针p返回到开头,若指向头节点,则循环内不需要等于     for(int i = 0; i < (cnt-k); i++)     {         p = p -> next;     }     printf("%dn",p -> data);      return 1; }  
//遍历和比较得到最小的值所在的节点 int LList_Print(LList_t *Head) { 	//对链表的头节点的地址进行备份 	LList_t *Phead = Head; 	LList_t *p = Head -> next;     LList_t *ptr = Head -> next -> next;     int min = p -> data; 	//首结点 	while(ptr->next) 	{ 		if(ptr -> data < p ->data)         min = ptr -> data; 	}     printf("data = %dn",ptr -> data);      return ptr -> data; }