• 单链表操作实例程序


    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    typedef struct node
    {
    	int val;
    	node *next;
    }node;
    node * create_list();
    void traverse_list(node *pHead);
    int  get_len_list(node *pHead);
    bool delete_list(node *pHead,int pos,int &val);
    bool insert_list(node *pHead,int pos,int val);
    void sort_list(node *pHead);
    void reverse_list(node *PHead);
    void main()
    {
    	node *pHead = create_list();
        int len = get_len_list(pHead);
    	cout<<"list length:"<<len<<endl;
    	traverse_list(pHead);
    	int val;
    	delete_list(pHead,6,val);
    	cout<<"被删除的值为:"<<val<<endl;
    	traverse_list(pHead);
    	insert_list(pHead,3,9);
    	insert_list(pHead,1,7);
    	traverse_list(pHead);
    	sort_list(pHead);
    	traverse_list(pHead);
    	reverse_list(pHead);
    	traverse_list(pHead);
    }
    
    node * create_list()
    {
    	int len = 6,i;
    	node *pHead = new node,*pTail,*pNew;
    // 	cout<<"请输入创建链表的节点数:";
    // 	cin>>len;
    	pTail = pHead;
    	pHead->next = NULL;
    	for (i=0;i<len;i++)
    	{
    		//cout<<"输入第"<<setw(2)<<i<<"节点的值:";
    		pNew = new node;
    		//cin>>pNew->val;
    		pNew->val = i+1;
    		pTail->next = pNew;
    		pTail = pNew;
    	}
    	pTail->next = NULL;
    	return pHead;
    }
    
    void traverse_list(node *pHead)
    {
    	node *p = pHead->next;
    	while (p)
    	{
    		cout<<p->val<<" ";
    		p = p->next;
    	}
    	cout<<endl;
    }
    
    //取得节点个数,不包含头节点
    int  get_len_list(node *pHead)
    {
    	node *p = pHead->next; //指向第一个节点
    	int len = 0;
    	while(p)
    	{
    		++len;
    		p = p->next;
    	}
    	return len;
    }
    //删除第pos个节点,pos从首节点開始计数
    bool delete_list(node *pHead,int pos,int &val)
    {
    	node *p = pHead;
    	int i = 1;
    	while (NULL != p->next && i < pos) //找到删除节点之前的一个节点
    	{
    		p = p->next;
    		i++;
    	}
    	if (i > pos || NULL == p->next)//
    	{
    		return false;
    	}
    	node * q = p->next;
    	val = q->val;
    	p->next = q->next;
    	delete q;
        return true;	
    }
    bool insert_list(node *pHead,int pos,int val)
    {
    	node *p = pHead;
    	int i = 1;
    	while(NULL != p->next && i < pos)
    	{
    		++i;
    		p = p->next;
    	}
    	if (i > pos /*|| NULL ==  p->next*/) 	
    	{ 
    		return false;
    	}
    	node *pNew = new node;
    	pNew->val = val;
    	pNew->next = p->next;
    	p->next = pNew;
    	return true;
    }
    //升序排序
    void sort_list(node *pHead)
    {
         node *p = pHead->next,*q;
    	 int tmp;
    	 while (p)
    	 {
    		 q= p->next;
    		 while(q)
    		 {
    			 if (p->val > q->val)
    			 {
    				 tmp = p->val;
    				 p->val = q->val;
    				 q->val = tmp;
    			 }
    			 q= q->next;
    		 }
    		 p = p->next;
    	 }
    }
    
    void reverse_list(node *pHead)
    {
    	node *p = pHead,*q1,*q2,*q3,*tempq1;
    	q1 = pHead->next;
    	tempq1 = q1;
    	q2 = q1->next;
    	while (q2)
    	{
    		q3 = q2->next;
    		q2->next = q1;
    		q1 = q2;
    		q2 = q3;
    	}
    	pHead->next = q1;
    	tempq1->next = NULL;
    }

  • 相关阅读:
    c#备忘知识点
    [置顶] IE6支持的滑动菜单栏
    摩斯电碼中英文对照表
    2013年5月15日星期三
    2013年5月9日星期四
    2013年5月12日16:20:43母亲节
    2013年5月8日星期三
    JS前端DOM中Range疑问
    2013年5月14日星期二
    2013年5月13日星期一
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4280171.html
Copyright © 2020-2023  润新知