0

ノードの前半が後半に移動するように、指定されたリンク リストを再配置する関数 reverseHalves() を作成するように依頼されました。例えば

リンクされたリストが与えられた[1 2 3 4 5 6]場合、結果のリストは になります[4 5 6 1 2 3]ノード数が奇数
の連結リストが与えられた場合、リストを分割し、前半にノードを追加する必要があります。つまり、 list が与えられた場合、結果の list は になります。[1 2 3 4 5][4 5 1 2 3]

しかし、 my 関数は無限の出力を提供します...

typedef struct _listnode{
    int item;
    struct _listnode *next;
} ListNode;

typedef struct _linkedlist{
    int size;
    ListNode *head;
    ListNode *tail;
} LinkedList;

使用した関数は次のとおりです。

// printList will print out the value in every nodes until there is a NULL
void printList(LinkedList *ll);
ListNode * findNode(LinkedList *ll, int index);
int insertNode(LinkedList *ll, int index, int value);

void reverseHalves(LinkedList *ll)
{
    int index;
    ListNode *new_head, *new_tail;
    new_head = NULL;
    new_tail = NULL;

    // determine the index of new tail, and the new head which is index+1*
    index = (ll->size + 1) / 2;

    // get the new head by findNode func,whose index is index+1 
    // make new_head point to the node found*
    new_head = findNode(ll, index);

    // make initial tail->next be the initial head*
    ll->tail->next = ll->head;

    // set the head to be the new head
    ll->head = new_head;

    insertNode(ll, ll->size, -1);
    new_tail = findNode(ll, ll->size);
    new_tail = NULL;
}
4

3 に答える 3

0

これはおおよその要点です:

new_head_index = (ll->size+1) / 2;
new_tail_index = new_head_index - 1;

if (new_tail_index < 0)
    return;

new_head = findNode(ll,new_head_index);
new_tail = findNode(ll,new_tail_index);

ll->tail->next = ll->head;
new_tail->next = NULL
ll->head = new_head;
于 2013-04-13T05:41:45.500 に答える