链表面试题

1、逆置链表

假设链表现在是 4->3->2->1->NULL
逆置后的链表是 1->2->3->4->NULL
步骤:
第一步:先把4用临时指针tmp保存起来,cur指向下一个节点,即cur指向3

第二步:令tmp指向newNode,4是第一个节点,则4的next为NULL,即令tmp->next =newNode(最开始newNode为NULL)

第三步:令 newNode= tmp

 

以此类推,当cur为NULL时,结束循环。

最后更新头指针,将newNode赋给pHead。

完整代码:

 1 void Reverse_list(pLinkList pList)
 2 {
 3     assert(pList);
 4     pLinkNode tmp = NULL;
 5     pLinkNode newNode = NULL; //记录链表翻转后的第一个节点
 6     pLinkNode cur = pList->phead;
 7     while (cur)
 8     {
 9         tmp = cur;
10         cur = cur->next;
11         tmp->next = newNode;
12         newNode = tmp;
13     }
14     pList->phead = newNode; //更新头结点

 

2.查找链表中间节点 (只允许遍历一次链表)

  快慢指针法:

  快指针每次走两步,慢指针每次走一步,等到快指针走到链表尾部时,慢指针刚好走到链表中间

 1 pLinkNode FindMidNode(pLinkList pList)//查找链表的中间节点
 2 {
 3     assert(pList);
 4     pLinkNode fast = pList->phead; //快指针,一次走两步
 5     pLinkNode slow = pList->phead;  //慢指针,一次走一步
 6     while(fast!=NULL)   
 7     {
 8         if (fast->next != NULL)
 9         {
10             fast = fast->next->next;
11         }
12         else
13         {
14             break;
15         slow = slow->next;
16     }
17     return slow;
18 }

3.删除链表倒数第k个节点,k大0,小于链表长度

    首先给个front指针和back指针,最开始都让他们指向头结点,先让front指针移动K次,然后让front指针和back指针同时移动,
一直到front指针指向为NULL,此时back指针指向的就是倒数第K个节点,
然后我们就可以删除back节点

 1 oid DelKNode(pLinkList pList, int k) //删除链表倒数第k个节点,k必须小于链表长度,k>0
 2 {
 3     assert(pList);
 4     pLinkNode del= NULL;
 5     
 6     if (k == 1)
 7     {
 8         PopBack(pList);
 9     }
10     pLinkNode front= pList->phead;
11     pLinkNode back = pList->phead;
12     while (front != NULL&&k>0)
13     {
14         front = front->next;
15         k--;
16     }
17     while (front != NULL)
18     {
19         front = front->next;
20         back = back->next;
21     }
22     
23         DataType  tmp = back->data;
24         back->data = back->next->data;
25         back->next->data = tmp;
26         del = back->next;
27         back->next = back->next->next;    
28         free(del);
29     
30 
31 
32 }

 

posted @ 2017-01-19 11:57  xmc_2022  阅读(125)  评论(0编辑  收藏  举报