单向链表的创建在这里不在赘述,详细请看另一篇文章《单向链表的创建》。在本篇文章中,主要通过举例的方式来帮大家理解单向链表节点的移动。
本篇文章中创建节点用如下表示
typdef struct node{
int date;//定义数据域
struct node * next;//定义指针域
} ElemSN;
例一:设head指向一个非空单项链表,设数据域值不重复,且都为正整数,将所有奇数节点放在偶数节点之前(不允许创建新节点)
方法一:拆成两根链表再合并
ElemSN * PreLink(ElemSN *head)
{
ElemSN *h1,*p,*q,*pk;
h1=NULL;
p=head;
while(p){
if(!p->data%2){
pk=p;
if(head==p)
head=head->next;
else
q->next=p->next
pk->next=h1;
h1=pk;
}
else{
q=p;
p=p->next;
}
}
for(p=head;p->next;p=p->next;)
p->next