题意:
有一个带头节点的单链表L,设计一个算法,删除其中第1,3,5,7号…节点,即删除奇数号的节点。
单链表的存储结构:
typedef struct LinkList{
int data;
LinkList * next;
}
分析:
要删除肯定要定义两个指针pre,p,但是这里是删除奇数号节点,也就是说,要隔一个才删除。
以往后移操作都是,p=p->next
但是,这是p指向的节点的删除了。free(q),这里就不能用这个了, 但是可以用前驱节点pre,pre = pre->next;
这个操作后移之后,再p = pre ->next;即可
思路:
1.定义两个指针pre,p
2.通过while循环,条件为p!=null;
将p指向的第一个节点删除,pre->next =p->next;free§;
后移pre=pre->next;
再判断,如果pre为空,则结束;否则p = pre->next;
C代码实现:
void delodd(LinkList *&L){
LinkList *pre = L,*P = pre->next;
while(p!=null){
pre->next = p->next; //首先删除第一个结点
free(p);
pre = pre->next;
p = pre->next;
}