单向链表插入与删除

题目要求:

//输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
//链表结点定义如下:
//struct ListNode
//{
//      int       m_nKey;
//      ListNode* m_pNext;
//};
//详细描述:
//本题为考察链表的插入和删除知识。
//链表的值不能重复
//构造过程,例如(输入样例)

//2
//1 -> 2
//3 -> 2
//5 -> 1
//4 -> 5
//7 -> 2
//最后的链表的顺序为 2 7 3 1 5 4 
//删除 结点 2 
//则结果为 7 3 1 5 4

#include <stdio.h>
#include <stdlib.h>

struct ListNode
{
      int       m_nKey;
      struct ListNode* m_pNext;
};

int main(void){
	int node_num,k,node_data_temp,node_next_data,del_node_data;
	struct ListNode *listhead, *node_next, *node_before;

	scanf("%d", &node_num);
	if(node_num<=0) return 0;
	if((listhead=(struct ListNode*)malloc(sizeof(struct ListNode)*node_num))==NULL)
		return 0;
	for(k=0; k<node_num; k++){
		if(k==0){
			scanf("%d", &node_data_temp);
			listhead->m_nKey = node_data_temp;
			listhead->m_pNext = NULL;
		}
		else{
			scanf("%d %d", &node_data_temp, &node_next_data);
			node_next=listhead->m_pNext; 
			node_before=listhead;
			while(node_before-listhead<k){
				if(node_before->m_nKey == node_next_data){  //找到需要指向的元素并向后插入
					if(node_next==NULL){
						node_before->m_pNext = listhead+k;
						(listhead+k)->m_nKey = node_data_temp;
						(listhead+k)->m_pNext = NULL;
					}
					else{
						(listhead+k)->m_nKey = node_data_temp;
						(listhead+k)->m_pNext = node_next;
						node_before->m_pNext = listhead+k;
					}
					break;
				}
				node_before = node_next;
				node_next = node_next->m_pNext;
			}
		}
	}

	scanf("%d", &del_node_data);  //输入要删除的元素
	for(node_next=listhead; node_next!=NULL; node_before=node_next,node_next=node_next->m_pNext){
		if(node_next->m_nKey == del_node_data){
			if(node_next==listhead){
				listhead = node_next->m_pNext;
			}
			else{
				node_before->m_pNext = node_next->m_pNext;
			}
			break;
		}
	}

//显示单向链表结果
	for(node_next=listhead; node_next!=NULL; node_next=node_next->m_pNext){
		printf("%d", node_next->m_nKey);
		if(node_next->m_pNext!=NULL)
			printf(" ");
	}

	system("pause");
	return 0;
}
<p>
</p>
原文地址:https://www.cnblogs.com/xhyzjiji/p/6159390.html