标签:单链表 数据结构 android地基系列
嗯,看别人整理过,自己再做的笔记,题目都是常见的必考题目,嘻嘻嘻,单链};
1、求链表中结点个数
思路:若链表为空,返回0;循环判断链表下一个指针是否为空,no,长度++(初始化用unsigned int length = 0),直到下一个为null,返回长度
// 求单链表中结点的个数
unsigned int GetListLength(ListNode * pHead)
{
if(pHead == NULL)
return 0;
unsigned int mLength = 0;
ListNode * pCurrent = pHead;
while(pCurrent != NULL)
{
mLength ++;
pCurrent = pCurrent->m_pNext;
}
return mLength ;
}
贴上代码,
ListNode* ReverseList(ListNode* head)
{
if(NULL==head|| NULL==head->next)
return head; //少于两个节点没有反转的必要。
ListNode* p = head;
ListNode* q = head->next;
ListNode* r;
head->next = NULL; //旧的头指针是新的尾指针,next需要指向
NULL
while(q){
r = q->next; //先保留下一个step要处理的指针
q->next = p; //然后p q交替工作进行反向
p = q;
q = r;
}
head=p; // 最后q必然指向NULL,所以返回了p作为新的头指针
return head;
}
int Search_k(LinkList list,int k) {
//查找链表list倒数第k个结点,并输出该结点data域的值
LNode *p = list->link, *q=list->link; //指计;p、q 指示第一个结点
int count=0;
while (p!=NULL) { //遍历链表直到最后一个结点
if (count<k) count++; //计数,若 count<k 只移动 p
else q=q->link;
p-p->link; //之后让p、q同步移动
} //while
if(count<k)
return 0; //查找失败返回0
else{ //否则打印并返回1
printf("%d", q->data);
return 1;
}
} //Search_k 标签:单链表 数据结构 android地基系列
原文地址:http://blog.csdn.net/lrs123123/article/details/43971015