码迷,mamicode.com
首页 > 其他好文 > 详细

整理剑指offer—链表操作

时间:2016-08-12 10:12:53      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

在链表中找到第一个含有某值的节点并删除该节点。

在这里我创建的链表里,头节点是不包含有效数据的,它只是起一个辅助作用,真正的链表数据从首节点开始。

typedef struct Node
{
    int data; //数据域
    struct Node * pNext; //指针域
}NODE, *PNODE;

   1:  void RemoveNode(PNODE pHead, int val)
   2:  {
   3:      if(pHead == NULL || pHead->pNext == NULL)
   4:          return;
   5:      
   6:      PNODE pToBeDeleted = NULL;
   7:      PNODE pNode = pHead;
   8:      
   9:      while(pNode != NULL && pNode->pNext->data != val)
  10:          pNode = pNode->pNext;
  11:          
  12:      if(pNode != NULL && pNode->pNext->data == val)
  13:      {
  14:          pToBeDeleted = pNode->pNext;
  15:          pNode->pNext = pNode->pNext->pNext;
  16:      }
  17:      
  18:      if(pToBeDeleted != NULL)
  19:      {
  20:          free(pToBeDeleted);
  21:          pToBeDeleted = NULL;
  22:      }
  23:  }

从尾到头打印链表。

这题最好让人想到的就是使用递归,结构比循环更为简单易懂,也更好进行掌握。

   1:  void printList_reverser(PNODE pHead)
   2:  {
   3:      if (pHead != NULL && pHead->pNext != NULL)
   4:          printList_reverser(pHead->pNext);
   5:      
   6:      printf("%d  ", pHead->data);
   7:  }
Technorati 标签: ,

整理剑指offer—链表操作

标签:

原文地址:http://www.cnblogs.com/yuyounglife/p/5763833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!