链表节点上移的函数出现问题

目的 想要达到链表内容的上移
疑问 1 不清楚如何进行指针的移动
2 函数还未执行就以退出


typedef struct Song {
    char name[30];//歌名
    char singer[40];//演唱者
    int time;//播放次数
    struct Song *Next;
    //指向下一首歌曲地址
} SONG;
void Moveup() ;//上移函数

struct Song *current = NULL;
//新歌曲地址
struct Song *head;
//第一首歌曲地址
struct Song *tail;


//最后一首歌曲地址

void Moveup() {
    printf("请您输入需要上移的歌曲名称:\n");
    SONG *previous;
    SONG *target;
    previous = head;
    target = previous->Next;
    char SongName[30], bottle[30];
    getchar();
    scanf("%s", &SongName);
    if (previous->name == NULL) {
        printf("您还未添加歌曲");
    } else if (target->name == NULL) {
        printf("您只添加了一首歌曲");
    } else if (strcmp(previous->name, SongName) == 0) {
        printf("您所要移动的歌曲已在第一位");
    } else if (strcmp(target->name, SongName) == 0 ) {
        /*strcpy(bottle, target->name);
        strcpy(target->name, previous->name);
        strcpy(previous->name, bottle);
        strcpy(bottle, target->singer);
        strcpy(target->singer, previous->singer);
        strcpy(previous->singer, bottle);*/

    } else {
        while (target->name) {
            previous = target;
            target = previous->Next;
            if (strcmp(target->name, SongName) == 0 ) {
                /*strcpy(bottle, target->name);
                strcpy(target->name, previous->name);
                strcpy(previous->name, bottle);
                strcpy(bottle, target->singer);
                strcpy(target->singer, previous->singer);
                strcpy(previous->singer, bottle); */
            }
        }
    }
}