链表相关问题在面试中出现的频率非常高。以下是我在前段时间学习《剑指offer》过程中对链表问题的总结。
- 单链表的创建和遍历
- 求单链表中节点的个数
- 查找单链表中的倒数第k个结点
- 查找单链表中的中间结点
- 反转链表
- 从尾到头打印单链表
- 删除链表结点
1. 单链表的创建和遍历
/**
* 构造长度为len的单链表
* @param len 链表中的元素个数
* @return head 返回单链表的头指针
*/
void createLinklist(LNode* &pHead,int len)
{
if (len>0)
{
int i,data;
scanf("%d",&data);
pHead =(LNode*)malloc(sizeof(LNode)); //不带头结点建单链表
if(pHead == NULL)
exit(EXIT_FAILURE);
pHead->data = data;
pHead->pNext = NULL;
LNode* pCur = pHead;
for(i=0;i<len-1;i++)
{
scanf("%d",&data);
LNode* pNew =(LNode* )malloc(sizeof(LNode));
if(pNew == NULL)
exit(EXIT_FAILURE);
pNew->data = data;
pNew->pNext = NULL;
pCur->pNext