链表的结构采用单链表即可
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
定义一个index指针和pre指针分别指向扫描到的第一个正数结点和第一个正数结点的前一个结点,再定义一个p指针对链表进行循环,将扫描到的负数结点移动到index指针前面,假设该链表带头结点。
void moveNode(LinkList &L){
LNode *index,*p,*pre;
*index=L;
while(index->next!=NULL&&index->data<0){
pre=index;
index=index->next;
}
if(index->next==NULL){
printf("链表中所有负数均在正数前面或链表无正数,无需移动结点");
}else{//index指针前全为负数,p指针从index开始往后遍历
p=index->next;
while(p!=NULL){
if(p->data<0){
LNode *temp=p;
pre->next=p;
p->next=index;
p=temp->next;
}
p=p->next;
}
}