如何删除第一个结点啊??
/*
* 单链表的操作
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct ys{
int data ;
struct ys *next ;
}snode ;
#define FALSE 1
#define TRUE 0
#define LEN sizeof(snode)
//#define FREE(p) {free(p) ; p=NULL;}
typedef snode* LinkList;
//删除链表
void clearList(LinkList pHead)
{
snode* pDelNode = NULL ;
while(pHead)
{
pDelNode = pHead ;
pHead = pHead->next ;
free(pDelNode) ;
}
}
// 创建单链表
snode* creatList(int k) //n表示创建结点的个数
{
int n = k-1 ;
snode* pHead = NULL ;
snode* pCurNode = NULL ;
snode* pPriNode = NULL ;
snode* pPrintNode = NULL ;
int nCount = 0 ;
if(!(pCurNode = (snode *)malloc(LEN)))
return NULL ;
pHead = pCurNode ;
pCurNode->data = rand()%100 ;
pCurNode->next = NULL ;
pPriNode = pCurNode ;
for(; nCount <n ; nCount++)
{
pCurNode = (snode*)malloc(LEN) ;
if(!pCurNode)
{
//删除已经创建的链表
clearList(pCurNode) ;
}
pCurNode->data = rand()%100 ;
pCurNode->next = NULL ;
pPriNode->next = pCurNode ;
pPriNode = pCurNode ;
}
//打印创建的链表
for(pPriNode=pHead ; pPriNode ; pPriNode=pPriNode->next)
{
printf("%4d " , pPriNode->data) ;
}
return pHead ;
}
//得到链表的长度
int getLength(LinkList pHead )
{
int length = 0 ;
while(pHead && pHead->next)
{
pHead = pHead->next ;
length ++ ;
}
return length ;
}
//得到要查找的结点k ok!
snode *GetNode(LinkList pHead , int k)
{
//在带头结点的单链表head中查找第i个结点,若找到(0≤i≤n),
//则返回该结点的存储位置,否则返回NULL。
snode* pFinNode = NULL ;
int nCount = 0 ;
if(!pHead )
return NULL ;
pFinNode = pHead ;
//假设k属于链表的范围内
while(pFinNode->next && nCount < k) // 一定要找到最后一个结点,所以用pFinNode->next !=NULL
{
pFinNode = pFinNode->next ;
++ nCount ;
}
if(nCount == k)
return pFinNode ;
else
return NULL ;
}
//在单链表中进行删除i结点
void deleteNode(LinkList pHead , int i)
{
snode* pPriNode = NULL ;
snode* pDelNode = NULL ;
snode* pPrintNode = NULL ;
//得到要删除的前一个结点 ,但是如何删除第一个结点呢????
pPriNode = GetNode(pHead , i-1) ;
pDelNode = pPriNode->next ;
pPriNode->next = pDelNode->next ;
free(pDelNode) ;
pPrintNode = pHead ;
while(pPrintNode!=NULL)
{
printf("%4d " , pPrintNode->data) ;
pPrintNode = pPrintNode->next ;
}
}
int main()
{
int count = 0 ;
int ind1 = 0 ;
int ind2 =0 ;
int listLength ;
LinkList pHead = NULL ;
snode *tmp1 , *tmp2 ;
srand((unsigned)time(NULL)) ;
pHead = creatList(6) ;
listLength = getLength(pHead) + 1 ;
printf("\n链表的长度是: %d\n" , listLength) ;
printf("输入要删除的结点号:0--%d\n" , listLength-1) ;
scanf("%d" , &ind2) ;
deleteNode(pHead , ind2) ;
printf("\n") ;
system("PAUSE") ;
return 0 ;
}
/*
请问各位大虾,是我哪里写错了 啊?为什么不可以删除第一个结点!
谢谢!
*/