首页 > 代码库 > 这几个容易搞糊涂,乘清醒赶紧写下来

这几个容易搞糊涂,乘清醒赶紧写下来

一、几个交换两个数a,b的算法:

void swap(int*m,int*n)
{
 int *t=0;
 t=m;m=n;n=t;
 /* 传过来的a,b的地址被赋给临时变量m,n,该函数只是对临时变量的交换,对a,b,pa,pb无影响 */
}
void swap2(int**m,int**n)
{
 int *t=0;
 t=*m;*m=*n;*n=t;
 /* 只是交换了pa,pb的指向,并未改变a.b的值 */
}
void swap3(int*m,int*n)
{
 int t=0;
 t=*m;*m=*n;*n=t;
 /* m指向a,n指向b,该函数直接通过指针操作交换了a,b的值 */
}

二、构造单链表的二级指针:

typedef struct lnode_tag{
 int data;
 struct lnode_tag *next;
}LNode,*LinkList;

第一种方法,将首节点指针直接作为返回值返回:

LinkList createList(LinkList lst,int arr[],int n)
{
 LNode *p,*q;
 int i;
 for(i=0;i<n;i++)
 {
  p=(LNode*)malloc(sizeof(LNode));
  p->data=http://www.mamicode.com/arr[i];
  p->next=lst;
  lst=p;
 }
 return lst;
}

第二种方法,直接对首节点进行操作:
void createList_2(LinkList *lst,int arr[],int n)
{
 LNode *p,*q;
 int i;
 for(i=0;i<n;i++)
 {
  p=(LNode*)malloc(sizeof(LNode));
  p->data=http://www.mamicode.com/arr[i];
  p->next=*lst;
  *lst=p;
 }
}

这几个容易搞糊涂,乘清醒赶紧写下来