单链表操作之在当前节点前插入一个元素

来源:互联网 发布:淘宝消费者保证金冻结 编辑:程序博客网 时间:2024/05/05 08:51

***单链表操作之在当前节点前插入一个元素***




//在当前结点前插入一个元素,没有给头指针;

//定义的结点的结构体和头指针的结构体;

typedef int DataType;typedef struct LinkNode{DataType data;struct LinkNode* next;}LinkNode,*pLinkNode;//结点结构体typedef struct LinkList{LinkNode* pHead;//头结点指针}LinkList ,*pLinkList;//链表


//函数原型void InsertFrontNod(pLinkNode pos,DataType x);


// 思路分析:

/*   前面一篇文章讲的是删除一个非尾结点,紧接着这篇就是在当前前插入一个元素,也是没有告诉头指针;其实这两个问题的解法是类似的,删除非尾结点(注意: 是非尾结点),是把当前结点的后一个结点的data直接覆盖当前结点的data,然后释放后一个结点,而在当前结点前插入一个元素,也是只给了指向当前结点的指针,我们类似非尾指针做一下,首先,肯定要malloc一块新结点,如果你一直想的是怎么将newNode插到当前结点前的话,那就有点误区了,依然打它后一个位置的注意,我们将newNode插入到当前结点的后面,先将当前结点的data赋给newNode 的data,然后将当前结点的data赋为x, 不要着急创建newNode的时候就将x赋给了newNode,这样的话就省去再开辟一个临时变量;

代码实现如下:
*/

void InsertFrontNod(pLinkNode pos,DataType x){pLinkNode newNode = (pLinkNode)malloc(sizeof(LinkNode));//为新节点开辟空间;pLinkNode tmp = NULL;if(newNode == NULL)//判断是否开辟成功;{printf("out of memory\n");exit(0);}if(pos == NULL)//如果么有当前结点,则返回;{printf("not search of this Node!\n");return ;}tmp = pos->next ;pos->next = newNode ;newNode ->next = tmp;//以上三行为将newNode插入到当前结点后;newNode ->data = pos->data ;pos->data = x;//以上两行为newNode的data和当前结点data的一个互换;}

相关文章:单链表操作之删除一个非尾结点


0 0
原创粉丝点击