6-2逆序数据建立链表
struct ListNode *createlist()
{
typedef struct ListLNode
{
int data;
struct ListNode *next;
}ListNode,*LinkList;//建表
LinkList p=NULL,head=NULL;
int n;
while(1)
{
scanf("%d",&n);
if(n==-1)
return head;
p=(LinkList)malloc(sizeof(ListNode));
p->data=n;
p->next=head;
head=p;
}
}
6-3删除单链表偶数节点
struct ListNode *createlist() {
int data;
struct ListNode *head,*pre;
head=pre=NULL;
scanf("%d",&data);
while(data!=-1)//当读到−1时表示输入结束
{
struct ListNode *a=(struct ListNode *)malloc(sizeof(struct ListNode));
a->data=data;
a->next=NULL;
if(head==NULL) {
head=a;
pre=a;
} else {
pre->next=a;
pre=a;
}
scanf("%d",&data);
if(data==-1)
break;
}
return head;
}
struct ListNode *deleteeven( struct ListNode *head ){
struct ListNode * ptr,*ptr1,*ptr2;
while(head && head->data %2 ==0){
ptr1=head;
head = head->next;
free(ptr1);
}
ptr1=head;
while(ptr1 && ptr1 ->next !=NULL)
{
while(ptr1->next && ptr1->next->data%2==0)
{ //直接跳过要删除的那一部分
ptr2=ptr1->next;
ptr1->next=ptr2->next;
}
ptr1=ptr1->next;
}
return head;
}
6-4链表逆置
struct ListNode *reverse( struct ListNode *head ){
struct ListNode *p,*q=head,*tail=NULL;
while(q!=NULL){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->data=q->data;
if(tail==NULL) p->next=NULL;
else p->next=tail;
tail=p;
q=q->next;
}
return tail;
}