链表的就地反转算法的实现

算法示例:在这里插入图片描述
反转代码:

void ReverseSeqLink(PSeqLink head)
{
    
    
    if(head == NULL) {
    
    
        perror("head is null.");
        return;
    }
    if(head->length < 2) {
    
    
        printf("no need to reverse.");
        return;
    }

    PLinkNode prev = head->linkNode;
    PLinkNode cur = prev->next;
    while(cur != NULL) {
    
    
        prev->next = cur->next;
        cur->next = head->linkNode;
        head->linkNode = cur;
        cur = prev->next;
    }

    return;
}

main.c

#include "seq_link.c"

int main(void)
{
    
    
    PSeqLink myHead = CreateSeqLink();
    int ret = 0;
    for(int i=0; i<10; i++) {
    
    
        ret = InsertIntoSeqLink(myHead, i+1 + 'A', i);
        if(ret != SEQ_SUCCESS) {
    
    
            perror("inser into seq link error.");
            return SEQ_ERR;
        } 
    }
    DisplaySeqLink(myHead);
    InsertIntoSeqLink(myHead, 20 + 'A', 3);
    DisplaySeqLink(myHead);
    DeleteFromSeqLink(myHead, 1);
    DeleteFromSeqLink(myHead, 0);
    DisplaySeqLink(myHead);
    printf("length of link is:%d\n", GetSeqLinkLength(myHead));
    printf("link is empty?[%s]\n", SeqLinkIsEmpty(myHead)?"yes":"no");
    printf("'D' is in the link?[%s]\n", SearchInSeqLink(myHead,'D') != SEQ_ERR?"yes":"no");
    printf("'V' is in the link?[%s]\n", SearchInSeqLink(myHead,'V') != SEQ_ERR?"yes":"no");
    ModifySeqLinkElment(myHead, 'Z', 1);
    DisplaySeqLink(myHead);
    ReverseSeqLink(myHead);
    printf("after reverse the link.\n");
    DisplaySeqLink(myHead);
    ClearSeqLink(myHead);
    DestroySeqLink(myHead);
	return 0;
}

结果截图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37546257/article/details/121320710
今日推荐