`
bliuqing
  • 浏览: 65108 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

C链表相关

阅读更多
#include "stdafx.h"

#include "stdio.h"
#include "stdlib.h"

typedef struct linknode{
	int data;
	struct linknode *next;
}node;
node *create(){
	node *head,*p,*s;
	int x, cycle=1;
	head = (node*)malloc(sizeof(node));
	p = head;
	while(cycle){
		printf("\nplease input the data:");
			scanf("%d",&x);
		if(x != 0){
			s = (node *)malloc(sizeof(node));
			s->data = x;
			printf("\n %d",s->data);
			p->next = s;
			p = s;
		}
		else cycle = 0;
	}
	head = head->next;
	p->next = NULL;
	printf("\n head->data %d",head->data);
	return(head);
}
void print(node *head){
	node *p;
	p = head;
	while(p != NULL){
		printf("\nprint... %d",p->data);
		p = p->next;
	}
}
node *reverse(node *head){
	node *prev, *pcur,*pnext;
	if(head == NULL || head->next ==NULL)
		return head;
	prev = head, pcur = prev->next;//有2个或2个以上才反转
	while(pcur){
		pnext = pcur->next;
		pcur->next = prev;
		prev = pcur;
		pcur = pnext;
	}
	head->next = NULL;
	head = prev;
	return head;
}
node *insert(node *head, int num){
	node *p0,*p1,*p2;
	p1 = head;
	p0 = (node *)malloc(sizeof(node));
	p0->data = num;
	while(p0->data > p1->data &&p1->next != NULL)
	{p2 = p1; p1=p1->next;}
	if(p0->data <= p1->data){//不是在尾部插入
		if(head ==p1){//在头结点前插入
			p0->next = p1;
			head = p0;
		}
		else{//中间插入
			p2->next = p0;
			p0->next = p1;
		}
	}
	else{//在尾部插入
		p1->next = p0;
		p0->next = NULL;
	}
	return head;
}
node *del(node *head,int num){
	node *pcur,*prev;
	pcur = prev = head ;
	while(pcur->data != num && pcur->next != NULL){
		prev = pcur;
		pcur = pcur->next;
	}
	if(pcur->data == num){//找到了合适的值
		if(pcur == head){//要删除的节点是头节点
			head = head->next;
			free(pcur);
			return head;
		}else{
			prev->next = pcur->next;
			free(pcur);
			return head;
		}
	}else{//没找到
		return head;
	}
}

int main(int argc, char* argv[])
{
	node *head;
	head = create();
	print(head);
	head = reverse(head);
	printf("after reverse\n");
	print(head);
	head = insert(head,2);
	print(head);
	head = del(head,2);
	print(head);
	printf("Hello World!\n");
	return 0;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics